如何在javascript DOM api中使用给定条件获取子节点?

时间:2012-08-20 05:18:34

标签: javascript xml dom xpath

xml文件是这样的:

<products>
  <product>
   <id>1</id>
   <name>pen</name>
  </product>
  <product>
   <id>2</id>
   <name>pencil</name>
  </product>
</products>
<employees>
  <employee>
   <name>Jack</name>
  <employee>
  <employee>
   <name>Mark</name>
  <employee>
</employees>

我是否只能获得<name>作为<product>儿童的xpath个节点? javascript dom中是否有很好的{{1}} api?

3 个答案:

答案 0 :(得分:3)

jQuery has an api用于解析和遍历xml。

var xmlObj = $.parseXML(xmlObj);

var nameNodes = xmlObj.find('product > name');

来自doc ..

  

jQuery.parseXML使用浏览器的本机解析功能   创建有效的XML文档。然后可以将此文档传递给   jQuery创建一个可以遍历的典型jQuery对象   操纵。

答案 1 :(得分:3)

在现代浏览器中,您可以使用querySelector遍历xml-tree。假设您的xml位于div#xmlsample内,那么此代码将为//product/name中的prodNames提供一个nodeList:

var xmlDoc = (new DOMParser())
              .parseFromString(document.querySelector('#xmlsample').innerHTML,
              "application/xml"),
    prodNames = xmlDoc.querySelectorAll('product name');

请参阅this jsfiddle

答案 2 :(得分:1)

  

我是否只能获得<name>的儿童<product>个节点?

提供的XML不是格式良好的XML文档(需要单个顶部元素)。

此外,两个<employee>开始标记没有相应的结束</employee>结束标记。

如果正确的XML文档是

<company>
    <products>
        <product>
            <id>1</id>
            <name>pen</name>
        </product>
        <product>
            <id>2</id>
            <name>pencil</name>
        </product>
    </products>
    <employees>
        <employee>
            <name>Jack</name>
        </employee>
        <employee>
            <name>Mark</name>
        </employee>
    </employees>
</company>

并且确实需要XPath表达式,然后选择所需元素的一个XPath表达式为:

/*/products/product/name

这将选择作为任何name元素的子元素的任何product元素,该元素是任何products元素的子元素,该元素是XML文档的顶级元素的子元素。 / p>