2012-02-27 77 views
0

我有一个简单的XML结构一样,当解析与simplexml_load_string产生这样的:PHP的SimpleXMLElement直接访问元素

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [token] => rs2rglql9c8ztem 
     ) 

    [attachments] => SimpleXMLElement Object 
     (
      [attachment] => 112979696 
     ) 
) 

XML结构:

<uploads token="vwl3u75llktsdzi"> 
    <attachments> 
    <attachment>123456789</attachment> 
    </attachments> 
</uploads> 

我能得到真正的唯一重要值“123456789”通过迭代,但这是一个faf。有没有一种方法可以直接访问它,理想情况下使用元素的名称。

我需要能够理想地获得属性。

+0

可能的重复[从SimpleXML访问@attribute](http://stackoverflow.com/questions/1652128/accessing-attribute-from-simplexml) – hakre 2013-06-24 01:41:53

回答

4

存储在它自己的变量a SimpleXMLElement的文本节点值的最简单方法是将元件转换为字符串:

$xml = simplexml_load_string($str); 
$var = (string) $xml->attachments->attachment; 
echo $var; 

UPDATE

根据在进一步的问题您的评论,SimpleXMLElement::attributesdocs方法也将返回一个SimpleXMLElement对象,可以以与上述解决方案相同的方式访问该对象。试想一下:

$str = '<uploads token="vwl3u75llktsdzi"> 
    <attachments> 
    <attachment myattr="attribute value">123456789</attachment> 
    </attachments> 
</uploads>'; 

$xml = simplexml_load_string($str); 
$attr = (string) $xml->attachments->attachment->attributes()->myattr; 
echo $attr; // outputs: attribute value 
+0

非常感谢抱歉,我应该从乞讨问这个问题,但是有没有一个简单的方法对于属性也是这样做的。谢谢。 – 111111 2012-02-27 16:30:37

+0

@ 111111我已经更新了我的回答以回应您的评论。 – rdlowrey 2012-02-27 16:35:37

+0

@rdlowery感谢兄弟 – 111111 2012-02-27 16:48:27

0

是的,你可以通过{}语法时才这里有云:

$xmlString = '<uploads token="vwl3u75llktsdzi"> 
    <attachments> 
    <attachment myattr="attribute value">123456789</attachment> 
    </attachments> 
</uploads>'; 

$xml = simplexml_load_string($xmlString); 
echo "attachment attribute: " . $xml->{"attachments"}->attributes()["myattr"] " \n"; 
echo " uploads attribute: " . $xml->{"uploads"}->attributes()["token"] . "\n"; 

可以代替 “附件” 与$ myVar的什么

记得属性()返回一个关联数组,所以你可以通过php array_keys()获得密钥或者做一个foreach循环。