2013-07-29 75 views
0

我有一个SimpleXML对象,它具有以下节点@attributes。这是从USPS获得的XML字符串中的simplexml_load_string()的结果。XML:什么是“@attributes”节点

$xml = 

SimpleXMLElement Object 
(
    [@attributes] => Array 
    (
     [CLASSID] => 3 
    ) 

    [MailService] => Priority Mail Express 1-Day 
    [Rate] => 19.10 
) 

我知道你可以做以下

$temp = $xml->attributes(); // will return object with '@attributes' note 
$temp = (array)$temp; // now in array form 
echo $temp['@attributes']['CLASSID']; // prints 3 

$xml->{'Rate'}; // will return the rate (19.10) as a string 

有什么特别的原因,你为什么要@attributesCLASSID?为什么不突出使CLASSIDMailServiceRate相同?

+0

对不起,我澄清了我的问题。我不问如何访问它。我在问XML对象的结构背后的原因。如有必要,请删除。 – musicliftsme

+0

XML的格式不是我们可以回答的问题,你必须问USPS。 –

+0

^,好的,那是真的。我注意到USPS奇怪地处理数据。 – musicliftsme

回答

2

节点的属性与其他节点/子节点的处理方式不同。 @attributes是指向属性内部表示的链接。

要访问属性,使用类似

echo $xml->attributes['CLASSID'] 

正如IMSOP在下面的评论指出,更好的方法来访问属性是使用数组表示法。例如,

echo $xml['CLASSID'] 
+1

感谢您的回答,所以'$ xml-> attributes() - > {'CLASSID'}'给了我一个值为3的XML对象。我正在阅读人们使用投射来获得他们想要的价值的可用形式。所以,像'(int)$ xml-> attributes() - > {'CLASSID'}'得到'3'或'(array)$ xml-> attributes() - > {'CLASSID'}'阵列[0] => 3'。这是正确的吗? – musicliftsme

+0

是的,这似乎是PHP处理这些情况的方式。 PHP是动态转换,所以它应该在飞行中执行它,但它可能与xml数据或其他问题有关。 – Kami

+0

现在够好了! (但似乎有变体是如何访问这个值 - 一些比其他人更长和丑陋的) – musicliftsme