我有以下PHP和XML:
$XML = <<<XML
<items>
<item id="12">
<name>Item A</name>
</item>
<item id="34">
<name>Item B</name>
</item>
<item id="56">
<name>Item C</name>
</item>
</items>
XML;
$simpleXmlEle = new SimpleXMLElement($XML);
print_r($simpleXmlEle->xpath('./item[1]'));
print "- - - - - - -\n";
print_r($simpleXmlEle->xpath('./item[2][@id]'));
print "- - - - - - -\n";
print_r($simpleXmlEle->xpath('./item[1]/name'));
我可以像这样访问ID
$simpleXmlEle->items->item[0]['id']
由于它是一个动态应用程序,xpath在运行时作为字符串提供,所以我相信我应该使用xpath。
以上PHP产生:
PHP:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 12
)
[name] => Item A
)
)
- - - - - - -
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 34
)
[name] => Item B
)
)
- - - - - - -
Array
(
[0] => SimpleXMLElement Object
(
)
)
我理解第一个输出,但在第二个输出中,返回整个元素而不是仅返回属性。
1)有什么想法?
最后一项也是空的 2)为什么这是正确的xpath?
我的目标是第二和第三输出为:34(第二元素的id属性的值)项目A(只是第一个元素的名称)。
答案 0 :(得分:2)
见下文:
// name only
$name = $simpleXmlEle->xpath("./item[1]/name");
echo $name[0], PHP_EOL;
// id only
$id = $simpleXmlEle->xpath("./item[2]/@id");
echo $id[0], PHP_EOL;
打印:
Array ( [0] => SimpleXMLElement Object ( [0] => Item A ) )
Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 34 ) ) )
确保不要执行:
print_r($objSimpleXML->xpath("//item[1]/name"));
根据文档//返回具有此名称的所有元素,因此如果在更深层次上有一个item元素,那么它的值也会被返回,这是不可取的。
希望有所帮助