我有以下脚本:
<?php
$str = '<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<ITEMS>
<BOOK>
<TITLE>Name 1</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="1">NOVEL</CATEGORY>
</BOOK>
<BOOK>
<TITLE>Name 2</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="2">MANUAL</CATEGORY>
</BOOK>
</ITEMS>
</ROOT>';
$xml = simplexml_load_string($str);
$category = $xml->xpath("/ROOT/ITEMS/BOOK/CATEGORY/text()");
print_r($category);
?>
我想选择xpath中的所有类别。
我也试过了:
$category = $xml->xpath("/ROOT/ITEMS/BOOK/CATEGORY");
但我的输出是:
Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 2 ) ) )
我不想要这个输出。我想要显示NOVEL和MANUAL。我不明白,因为我没有在xpath中使用属性命令而且我得到了它。
如何解决?谢谢。
答案 0 :(得分:1)
我有自己的解决方案。几个小时后我就拥有它!感谢您在回答中的链接。我阅读了这些示例,并找到了如何获得正确的值。
<?php
$str = '<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<ITEMS>
<BOOK>
<TITLE>Name 1</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="1">NOVEL</CATEGORY>
</BOOK>
<BOOK>
<TITLE>Name 2</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="2">MANUAL</CATEGORY>
</BOOK>
</ITEMS>
</ROOT>';
$xml = simplexml_load_string($str);
$category = $xml->xpath("/ROOT/ITEMS/BOOK/CATEGORY/text()");
while(list( , $node) = each($category)) {
echo $node."<BR />";
}
?>
答案 1 :(得分:0)
当你使用xpath返回数组时,是一个SimpleXMLElement对象(http://php.net/manual/ru/simplexmlelement.xpath.php)的数组,所以它们有自己的结构。不知何故,您可以遍历此数组并获取所有节点值,如下所示:
<?php
$str = '<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<ITEMS>
<BOOK>
<TITLE>Name 1</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="1">NOVEL</CATEGORY>
</BOOK>
<BOOK>
<TITLE>Name 2</TITLE>
<AUTHOR>Author</AUTHOR>
<CATEGORY id="2">MANUAL</CATEGORY>
</BOOK>
</ITEMS>
</ROOT>';
$xml = simplexml_load_string($str);
$categories = $xml->xpath("/ROOT/ITEMS/BOOK/CATEGORY/text()");
foreach($categories as $category) {
echo "$category\n";
}