1

这是我的代码:

$XML = <<<XML
<items>
    <item id="123">
        <name>Item 1</name>
    </item>
    <item id="456">
        <name>Item 2</name>
    </item>
    <item id="789">
        <name>Item 3</name>
    </item>
</items>
XML;


$objSimpleXML = new SimpleXMLElement($XML);

print_r($objSimpleXML->xpath('./item[1]'));
print "- - - - - - -\n";
print_r($objSimpleXML->xpath('./item[2][@id]'));
print "- - - - - - -\n";
print_r($objSimpleXML->xpath('./item[1]/name'));

没什么特别的:我试图通过XPath. 路径必须是字符串以设计从XML配置文件加载其数据的动态程序。

当使用 PHP 对象访问时,$objSimpleXML->items->item[0]['id']一切正常。但是XPath方法并没有真正起作用。上面的代码生成以下输出:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 123
                )

            [name] => Item 1
        )

)
- - - - - - -
Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 456
                )

            [name] => Item 2
        )

)
- - - - - - -
Array
(
    [0] => SimpleXMLElement Object
        (
        )

)

我同意第一个输出。但在第二个输出中,返回的是整个元素而不是属性。为什么?最后一个listing是空的而不是name内容?

4

2 回答 2

3

这是因为您的 XPath 错误。您正在使用谓词,即

./item[2][@id]

这意味着“item具有id属性的第二个”,但看起来你想要

./item[2]/@id
于 2013-01-11T14:48:08.230 回答
0

试试这个,如果那不是你想要的,请举一个更好的例子。

<?php

$XML = <<<XML
<items>
    <item id="123">
        <name>Item 1</name>
    </item>
    <item id="456">
        <name>Item 2</name>
    </item>
    <item id="789">
        <name>Item 3</name>
    </item>
</items>
XML;


$objSimpleXML = new SimpleXMLElement($XML);

$items = $objSimpleXML->xpath('./item');

print '<pre>';
print_r($items[0]);
print "- - - - - - -\n";
print_r($items[1]->attributes()->id);
print "- - - - - - -\n";
print_r($items[2]->name);
于 2013-01-11T14:56:41.230 回答