我可以使用SimpleXML& Xpath直接选择元素属性?

时间:2010-10-28 17:36:29

标签: php simplexml xpath

即。 - 我想使用xpath表达式“// banana / @ color”和以下示例xml ...返回字符串“yellow”...

<fruits>
 <kiwi color="green" texture="hairy"/>
 <banana color="yellow" texture="waxy"/>
</fruits>


$fruits = simplexml_load_string(
'<fruits>
 <kiwi color="green" texture="hairy"/>
 <banana color="yellow" texture="waxy"/>
</fruits>');

print_r($fruits->xpath('//banana/@color'));

产生

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [color] => yellow
                )

        )

)

而我更喜欢像...这样的东西。

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

)

...所以我不需要在我写的应用程序中写一个特殊的案例。

非常感谢! :)

1 个答案:

答案 0 :(得分:7)

我刚给你的测试一个镜头,因为我很好奇,我发现它在转换为字符串时确实产生了字符串值yellow

$fruits = simplexml_load_string(
'<fruits>
 <kiwi color="green" texture="hairy"/>
 <banana color="yellow" texture="waxy"/>
</fruits>');

$found = $fruits->xpath('//banana/@color');
echo $found[0];

这似乎是SimpleXmlElement属性节点的表示方式。因此,如果您不直接打印/回显它,可以将其用作(string) $found[0]

当然,如果您依赖剩余的SimpleXMLElement值,那么我认为这可能是一个问题。但我认为只要记住在以后使用该节点时转换为字符串仍然可行。

如果您真的需要一个支持属性作为节点的节点的详细界面,那么您可能只想切换到DOMDocument。您的代码将变得更加冗长,但实现更加清晰。