【问题标题】:Using XPath to select certain nodeName使用 XPath 选择某个 nodeName
【发布时间】:2011-04-19 07:36:36
【问题描述】:

我按照 W3Schools 上的教程进行操作。

http://www.w3schools.com/xpath/xpath_syntax.asp

上面写着:

nodename 选择所有子节点 命名节点

bookstore 选择所有子节点 的书店元素

这是我的代码

书店.xml:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <bookstore>
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>
    </bookstore>

php 文件:

    <?php
    $xml = simplexml_load_file("bookstore.xml");
    if(!$xml)
    { 
    echo 'bad';
    }else
    {

    $res = $xml->xpath("//bookstore");

    when I use $res = $xml->xpath("bookstore");
    $xml_res1 = $res1->asXML("booklist.xml");
    }
    ?>

它只返回一个空数组。 我只想选择所有 &lt;book&gt; 元素(不包括 &lt;bookstore&gt;&lt;?xml version?&gt; 标头)

在 W3Schools 示例中,“//bookstore”可以选择书店元素的所有子节点。

谁能告诉我为什么我得到一个空数组?谢谢!

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

    使用

    /*/book
    

    甚至

    /*/*
    

    当然,你也可以使用

    /bookstore/book
    

    甚至

    /child::bookstore/child::book
    

    鉴于提供的 XML 文档,以上所有表达式都准确地选择了想要的节点——文档中的所有 book 元素。

    始终尽量避免使用// 缩写,因为这可能会导致评估效率非常低。

    【讨论】:

    • @Dimitre Novatchev:你能看看这个问题吗:stackoverflow.com/questions/6478324/…
    • @Fran:我无法理解这个问题的任何内容——即使代码是用什么语言编写的。我不认为它包含任何与 XPath 相关的内容——否则我会回答的。
    • @Dimitre Novatchev:基本上,他必须排除 html 标签。使用 xpath exp //text() 可以工作,只是不检索空行。
    • @Fran:这仍然不是 XPath 问题。他必须使用这样的参数调用他的 XML 解析器,以防止它丢弃仅包含空格的文本节点,或者如果他对 XML 文档本身具有修改权限,他可以在顶部元素上放置一个 xml:space="preserve" 属性。
    • @Dimitre Novatchev:他从服务器接收到该 hml:空行用

      例如。无论如何,谢谢。

    【解决方案2】:

    该语句应该是:选择所有具有此名称的子节点

    这就是为什么在规范12 中将其称为名称测试

    如果你想要book 元素:

    /bookstore/book
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多