php simplexmlelement直接访问元素

时间:2012-02-27 16:20:34

标签: php simplexml

我有一个简单的XML结构,当用simplexml_load_string进行解析时会产生这样的结果:

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

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

XML结构:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

<强>更新

根据评论中的进一步问题,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

答案 1 :(得分:0)

是的,你可以通过{} sytax来实现:

$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或其他东西替换“附件”

记住attributes()返回一个关联数组,这样你就可以用php array_keys()获取键,或者做一个foreach循环。