XPath - 显示属性

时间:2015-04-21 12:58:11

标签: php xpath

我有以下脚本:

<?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中使用属性命令而且我得到了它。

如何解决?谢谢。

2 个答案:

答案 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";
        }