php simplexmlelement直接访问元素


php simplexmlelement directly access element

我有一个简单的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。有没有一种方法可以直接访问它,最好是使用元素的名称。

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

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

是的,您可以通过这里的{}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()返回一个关联数组,这样您就可以使用phparray_keys()获取密钥或执行foreach循环。