javascript如何判断xml文件某节点是否存在

javascript如何判断xml文件某节点是否存在,第1张

//

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文件里的节点值的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9626153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存