验证xml树的某个节点是否为空

时间:2018-07-11 13:42:13

标签: javascript node.js xml tree

我有一个xml字符串。

<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="web">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="web" cover="paperback">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

我需要验证所有节点都包含某些东西(值或更多节点)。

我正在使用nodejs。我搜索是否有一个可以浏览所有节点的程序包,但我没有看到任何包,这是使用递归的唯一解决方案吗?

一个接一个的节点,如果包含一些节点,我会调用相同的功能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用 xmldom 软件包,该软件包具有一种称为hasChildNodes()的好方法,您可以通过该方法确定XML文档是否确实存在。

这里是一个示例,(您需要根据需要对其进行修改)。

var xmlDomObj = new (require('xmldom')).DOMParser;
var xmlDocument = xmlDomObj.parseFromString(YOUR_XML_VARIABLE);

var nodeObj = xmlDocument.getElementsByTagName(nodeName_you_are_looking_for)[0];   
if (nodeObj) {
    var currentNodeObj = nodeObj.childNodes[0];
    if (!currentNodeObj) { // if the node not found
        // Logic goes here if the node not found
    } else {
        // Logic goes here if the node is found
    }
}

希望这会有所帮助!