2010-10-28 36 views
4

即 - 我想返回一个字符串 “黄” 使用类似XPath表达式 “//香蕉/ @色” 和下面的示例XML ...我可以使用SimpleXML和Xpath直接选择元素属性吗?

<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 
     ) 

) 

...所以我不需要写一个特殊情况到我正在写的应用程序。

非常感谢! :)

回答

5

我刚刚给你的测试一枪,因为我很好奇,我发现它确实产生字符串值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那么这可能是一个问题,我想。但是我认为只要记住在以后使用节点时将字符串转换为字符串仍然可行。

如果您确实需要一个支持Attribute作为节点的节点的详细界面,那么您可能需要切换到DOMDocument。你的代码会变得更加冗长,但是实现更加清晰。

相关问题