2011-11-09 47 views
1

我在JavaScript中苦苦挣扎了一些XML,如何才能仅选择具有某些属性值的标记?如何通过标记属性检索XML标记

下面的示例w3 schools使用此xml file

<?xml version="1.0" encoding="ISO-8859-1"?> 

<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"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 

</bookstore> 

然后将下面的脚本获取并在新的一行打印出所有从价格标签的文本。

<html> 
<body> 
    <script type="text/javascript"> 
     function loadXMLDoc(dname){ 
      if (window.XMLHttpRequest){ 
       xhttp=new XMLHttpRequest(); 
      } 
      else{ 
       xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

      xhttp.open("GET",dname,false); 
      xhttp.send(""); 
      return xhttp.responseXML; 
     } 
     //getting the xml into a var to parse  
     xml=loadXMLDoc("books.xml"); 


     //the path in question 
     path="/bookstore/book/price/text()" ////how can i change this to only select the prices of the books where the category="COOKING" ? 


     // code for IE 
     if (window.ActiveXObject){ 
      var nodes=xml.selectNodes(path); 

      for (i=0;i<nodes.length;i++) 
       { 
        document.write(nodes[i].nodeValue); 
        document.write("<br />"); 
       } 
     } 
     // code for Mozilla, Firefox, Opera, etc. 
     else if (document.implementation && document.implementation.createDocument){ 
      var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE,null); 
      var result=nodes.iterateNext(); 

      while (result) 
       { 
        document.write(result.nodeValue + "<br />"); 
        result=nodes.iterateNext(); 
       } 
     } 
    </script> 
</body> 
</html> 

是否有可能改变路径,这样脚本将只打印价格标签,其中父标签“书”有“烹饪”的类别属性的文本(我把评论脚本当前路径是我认为我需要改变的地方,但我无法知道如何)?

我真的陷入困境,似乎无法找到如何得到它。任何帮助将很棒:) :)

回答

3

在你的路径中,你需要把例如//bookName/[@CATEGORY = COOKING] @看作属性。希望这可以帮助。