在PHP中查询SimpleXML结果


Querying SimpleXML result in PHP

我在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基本用法的手册页。