使用xpath选择某些节点名称

时间:2010-09-30 11:49:55

标签: xpath

我跟着w3school的tut

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

  

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

     

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

这是我的代码 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");
}
?>

它只返回一个空数组。 我想只选择所有<book>元素(不包括<bookstore><?xml version?>标题)

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

任何人都可以告诉我为什么我有一个空阵列?感谢

2 个答案:

答案 0 :(得分:1)

该声明应为:选择具有此名称的所有子节点

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

如果您想要book元素:

/bookstore/book

答案 1 :(得分:1)

使用

/*/book

甚至

/*/*

当然,您也可以使用

/bookstore/book

甚至

/child::bookstore/child::book

鉴于提供的XML文档,所有上述表达式都精确选择了所需的节点 - 文档中的所有book元素。

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