我在PHP中使用SimpleXml,它对我来说效果很好。
最近我遇到了一个问题,当我试图抓取一个特定的节点(我希望这是正确的术语)。
下面是一个示例XML
<xml>
<attribute>
<item name="fun_level">
<value>Really Fun</value>
</item>
</attribute>
</xml>
所以我使用simplexml来获取所有属性,并通过循环运行它们,这一切都很好。但是,当我想要获取具有特定名称的项目的"值"时,我遇到了麻烦。
如果我只是试图获取第一项的值,则此操作有效:
$value = (string)$attribute->item[0]->value;
不幸的是,我想引用一个特定的项目,所以我试图做这样的事情,这是不工作:
$value = (string)$attribute->item["@name='fun_level'"]->value;
我假设我在引用该项的name属性时语法出了问题。我应该用圆括号吗?做好吗?我需要对引号做一些不同的处理吗?
谢谢你的帮助!
您需要使用SimpleXMLElement::xpath()
方法。
<?php
error_reporting(-1);
ini_set('display_errors', true);
$xml = '<xml>
<attribute>
<item name="fun_level">
<value>Really Fun</value>
</item>
</attribute>
</xml>';
$sxe = new SimpleXMLElement($xml);
foreach($sxe->xpath('//item[@name="fun_level"]') as $item){
echo $item->value;
}
另外,更多示例请参见描述SimpleXML基本用法的手册页。