//
function XmlUtils (config) {
/定义私有属性/
thisisIE = !!(windowattachEvent && !windowopera);
thisinit();
if(config) {
thisdataType = configdataType == 'json' 'json' : 'array';
if(configxmlPath) thisloadXml(configxmlPath);
}
}
XmlUtilsprototype = {
xmlDoc : null,
xmlPath : null,
dataType : null,
/
初始化
/
init : function () {
if (thisisIE) {
var activexArr = ["MSXML4DOMDocument", "MSXML3DOMDocument", "MSXML2DOMDocument", "MSXMLDOMDocument", "MicrosoftXmlDom"];
for(i=0; i<activexArrlength; i++){
try{
thisxmlDoc = new ActiveXObject(activexArr[i]);
}catch(e){}
}
} else {
thisxmlDoc = documentimplementationcreateDocument("", "", null);
}
},
/
加载xml文件,参数:
@param {string} xmlPath:加载的xml文件路径;
@return {Object} true 正常加载; false 加载失败
/
loadXml : function (xmlPath) {
try {
thisxmlDocasync = false;
thisxmlDocload(xmlPath);
thisxmlPath = xmlPath;
return true;
} catch (e) {
return false;
}
},
/
加载XML字符串
@param {Object} XMLString
/
loadXmlString: function(xmlString) {
if (thisisIE) {
thisxmlDocloadXML(xmlString);
} else {
var parser = new DOMParser();
thisXMLDoc = parserparseFromString(xmlString, "text/xml");
}
},
/
判断节点的是否有子节点
@param {Object} node
@return {Object} 有子节点则返回true,否则返回false
/
hasChildNodes : function (node) {
return nodehasChildNodes();
},
/
判断节点的是否有属性
@param {Object} node
@return {Object} 有属性则返回true,否则返回false
/
hasAttributes : function (node) {
return (nodeattributeslength > 0) true : false;
},
/
判断节点的是否是文本节点,包括带CDATA区段的文本节点
@param {Object} node
@return {Object} 是文本节点则返回true,否则返回false
/
isTextNode : function (node) {
var type = thisgetNodeType(node);
return (type == 3 || type == 4) true : false;
},
/
返回根节点
@return {Object} 根节点
/
getRoot : function () {
return thisxmlDocdocumentElement;
},
/
返回节点的第一个子节点,没有参数则返回根节点的第一个子节点
@param {Object} node
@return {Object} 节点的第一个子节点
/
getFirstChild : function (node) {
return node nodefirstChild : thisgetRoot()firstChild;
},
/
返回节点的最后子节点,没有参数则返回根节点的第一个子节点
@param {Object} node
@return {Object} 节点的最后一个子节点
/
getLastChild : function (node) {
return node nodelastChild : thisgetRoot()lastChild;
},
/
返回节点的下一个节点,没有参数则返回根节点的第一个子节点
@param {Object} node
@return {Object} 节点的下一个节点
/
getNextNode : function (node) {
return node nodenextSibling : null;
},
/
返回节点的上一个节点,没有参数则返回根节点的第一个子节点
@param {Object} node
@return {Object} 节点的上一个节点
/
getPreviousNode : function (node) {
return node nodepreviousSibling : null;
},
/
返回节点的子节点,没有参数则返回null
@param {Object} node
@return {Object} 节点所有子节点
/
getChildNodes : function (node) {
return (node && thishasChildNodes(node)) nodechildNodes : null;
},
/
返回节点的父节点,没有参数则返回null
@param {Object} node
@return {Object} 节点父节点
/
getParentNode : function (node) {
return node nodeparentNode : null;
},
/
根据节点名返回节点数组文本值,参数:
@param {string或object} nodeName:节点名称;
@return {object} 节点存在返回节点数组;节点不存在则返回null。
/
getNodesTextByName : function (nodeNames) {
return nodeNames (thisdataType == 'json' thisgetJsonNodesTextByName(nodeNames) : thisgetArryNodesTextByName(nodeNames)) : null;
},
/
根据节点名返回节点普通数组文本值,参数:
@param {string或object} nodeName:节点名称;
@return {object} 节点存在返回节点普通数组。
/
getArryNodesTextByName : function (nodeNames) {
var rs = [];
//返回普通数组格式
switch (typeof(nodeNames)) {
case 'string':
var nodes = thisgetNodesByTagName(nodeNames);
for (var i = 0; i < nodeslength; i++) {
rspush(nodes[i]text);
}
break;
case 'object':
var subRs;
var nodes;
for (var i = 0; i < nodeNameslength; i++) {
nodes = thisgetNodesByTagName(nodeNames[i]);
subRs = [];
for (var j = 0; j < nodeslength; j++) {
subRspush(nodes[j]text);
}
rspush(subRs);
}
break;
}
return rs;
},
/
根据节点名返回节点JSON数组文本值,参数:
@param {string或object} nodeName:节点名称;
@return {object} 节点存在返回节点JSON数组;节点不存在则返回null。
/
getJsonNodesTextByName : function (nodeNames) {
var rs = null;
//返回JSON数组格式
switch (typeof(nodeNames)) {
case 'string':
eval('rs = {' + nodeNames + ':[]}');
var nodes = thisgetNodesByTagName(nodeNames);
for (var i = 0; i < nodeslength; i++) {
eval('rs' + nodeNames + 'push({' + nodeNames + i + ': nodes[i]text})');
}
break;
case 'object':
rs = {};
var nodes;
for (var i = 0; i < nodeNameslength; i++) {
eval('rs' + nodeNames[i] + '=[]');
nodes = thisgetNodesByTagName(nodeNames[i]);
for (var j = 0; j < nodeslength; j++) {
eval('rs' + nodeNames[i] + 'push({' + nodeNames[i] + j + ': nodes[j]text})');
}
}
break;
}
return rs;
},
/
根据节点属性得到节点,参数:
@param {String} key:属性名,默认是id
@param {String} value:属性值
@return {String} 符合条件的节点数组。
/
getNodesByAttribute : function (key, value) {
key = key key : 'id';
value = value value : '';
return id thisxmlDocgetElementById(id) : null;
},
/
根据节点名得到节点,参数:
@param {string} tagName:节点名称
@return {string} 指定节点名字的和位置的节点或节点数组。
/
getNodesByTagName : function (tagName) {
return tagName thisxmlDocgetElementsByTagName(tagName) : null;
},
/
根据节点路径返回第index个节点,参数:
@param {string} xPath:节点路径
@param {number}index:要索引的位置,为空或0则返回所有查找到的节点。
@return {string} 指定节点名字的和位置的节点或节点数组。
/
getNodesByXpath : function (xPath, index) {
if (!xPath) return null;
var nodes = thisxmlDocselectNodes(xPath);
var len = nodeslength;
if(!index || index > len || index < 0) return nodes;
for(var i=0; i<len; i++){
if(i == index - 1) return nodes[i];
}
},
/
得到指定节点文本,参数:
@param {object} node:节点
@return {string} 节点文本,为空则返回null
/
getText : function (node) {
return node nodetext : null;
},
/
得到指定节点名称,参数:
@param {object} node:节点
@return {string} 节点名称,为空则返回null
/
getTagName : function (node) {
return node nodenodeName : null;
},
/
返回节点类型,参数:
@param {object} node:节点
@return {string} 节点类型,为空则返回null
1-element
2-attribute
3-text
4-cdata
5-entity reference
6-entity
7-pi (processing instruction)
8-comment
9-document
10-document type
11-document fragment
12-notation
/
getNodeType : function (node) {
return node nodenodeType : null;
},
/
创建节点,参数:
@param {string} nodeName:节点名称,必填
@param {string} text:节点文本,可为空
@param {Object} attributes:属性值-JSON数组,可为空,例:{id:'id001',name:'name001'}
@param {Object} node:要增加子节点的节点,为空则返回新建的节点
@param {Boolean} cdata:是否生成带有CDATA区段的节点,true:生成,false:不生成
@return {Object} 创建的节点,有异常则返回null
/
createNode: function(nodeName, text, attributes, node, cdata) {
if (thisisIE) {
//创建子接点
var childNode = thisxmlDoccreateElement(nodeName);
//创建文本节点
var textNode = cdata == true thisxmlDoccreateCDATASection(text) : thisxmlDoccreateTextNode(text);
childNodeappendChild(textNode);
//添加属性
for (var i in attributes) {
thiscreateAttribute(childNode,i,attributes[i]);
};
return node nodeappendChild(childNode) : childNode;
} else {
alert('FF创建节点再说');
return null;
}
},
/
创建带CDATA区段的节点,参数:
@param {string} nodeName:节点名称,必填
@param {string} text:节点文本,可为空
@param {Object} attributes:属性值-JSON数组,可为空,例:{id:'id001',name:'name001'}
@param {Object} node:要增加子节点的节点,为空则返回新建的节点
/
createCDATANode: function(nodeName, text, attributes, node) {
thiscreateNode(nodeName, text, attributes, node, true);
},
/
创建节点属性,参数:
@param {Object} node:节点,必填
@param {String} key:属性名,必填
@param {Object} value:属性值,必填
@param {Object} node:返回新增属性的节点
@return {Object} 增加属性的节点,有异常则返回null
/
createAttribute: function(node, key, value) {
if (thisisIE) {
if(!key) return;
var attr = thisxmlDoccreateAttribute(key);
attrvalue = value value : "";
nodesetAttributeNode(attr);
return node;
} else {
alert('FF创建节点再说');
return node;
}
return null;
},
/
把节点加到根节点上,参数:
@param {Object} node:节点
@return {Object} 有异常则返回null
/
addNodeToRoot: function(node) {
if(!node) return null;
thisgetRoot()appendChild(node);
return node;
},
/
把节点加到另外节点上,参数:
@param {Object} node:节点
/
addNode: function(node,childNode) {
return (node && childNode) nodeappendChild(childNode) : false;
},
/
从父节点移除节点自身,参数:
@param {Object} newNode:要替换的节点
@param {Object} oldNode:要被替换的节点
/
replaceChild: function(newNode, oldNode) {
var parentNode = oldNodeparentNode;
if(!newNode || !oldNode || !parentNode) return;
parentNodereplaceChild(newNode, oldNode);
},
/
从父节点移除节点自身,参数:
@param {Object} node:要移除的节点
/
removeChild: function(node) {
if(!node || !nodeparentNode) return;
nodeparentNoderemoveChild(node);
},
/
移除节点的所有子节点,参数:
@param {Object} node:父节点
/
removeChildNodes: function(node) {
if (node && thishasChildNodes(node)) {
var childNodes = nodechildNodes;
for(var i = 0; i < childNodeslength; i++) {
noderemoveChild(childNodes[0]);
}
}
},
/
设置节点属性值,不存在则新建,参数:
@param {Object} node:要设置的节点
@param {String} key:要设置的属性名
@param {String} value:要设置的属性值
/
setAttribute: function(node, key, value) {
thiscreateAttribute(node, key, value);
},
/
设置文本节点的文本,参数:
@param {Object} node:要设置的节点
@param {String} text:要设置的文本
/
setText: function(node, text) {
if(thisisTextNode(node)) nodetext = text;
},
/
在文本节点后面追加文本,参数:
@param {Object} node:要设置的节点
@param {String} text:要设置的文本
/
appendText: function(node, text) {
if(thisisTextNode(node)) nodeappendData(text);
},
/
输出xml,为空则输出根节点文本,参数:
@param {Object} node:要输出的节点
/
toString: function(node) {
node = node node : thisxmlDocdocumentElement;
if (typeof node == 'string') return node;
return thisisIE nodexml : new XMLSerializer()serializeToString(node);
}
}
对比查看其中html代码如下所示
<html>
<body>
<h1>W3Schoolcomcn Internal Note</h1>
<p>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</p>
<script type="text/javascript">
if (windowXML>
这个就麻烦了,是改文件里的xml文荣,还是改xml字串里的内容。
如果是改文件,就要先读文件,读文件的代码可以搜索到。
改xml里的字串,不知道你是要替换还是有什么规则啊。
读xml文件
<script language="Javascript">
var xmlDoc=new ActiveXObject("MicrosoftXMLDOM")
xmlDocasync="false"
xmlDocload("notexml")
</script>
以上就是关于javascript如何判断xml文件某节点是否存在全部的内容,包括:javascript如何判断xml文件某节点是否存在、js读取xml文件内容、求js修改xml文件里的节点值的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)