XML:啥是“@attributes”节点[重复]

Posted

技术标签:

【中文标题】XML:啥是“@attributes”节点[重复]【英文标题】:XML: what is the "@attributes" node [duplicate]XML:什么是“@attributes”节点[重复] 【发布时间】:2013-07-29 13:23:51 【问题描述】:

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

$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 相同?

【问题讨论】:

对不起,我澄清了我的问题。我不是在问如何访问它。我在询问 XML 对象结构背后的原因。如有必要,请删除。 XML 的格式不是我们能回答的,你得问 USPS。 ^,好的,这是真的。我注意到 USPS 处理数据的方式很奇怪。 如果您查看前面问题的答案,您应该会发现这正是 SimpleXML 在var_dump 输出 中表示 XML 属性的方式。实际对象中没有@attributes,您无需担心。 您的最后一个示例表明您尚未阅读其他问题的答案。您确实不需要需要转换为数组并查找['@attributes'],您只需键入echo $xml['CLASSID'];。见the "basic usage" in the manual。 【参考方案1】:

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

要访问属性,请使用类似

echo $xml->attributes['CLASSID']

正如 IMSop 在下面的 cmets 中指出的,访问属性的更好方法是使用数组表示法。例如,

echo $xml['CLASSID']

【讨论】:

感谢您的回答,所以$xml->attributes()->'CLASSID' 给了我一个值为3 的XML 对象。我正在阅读人们使用强制转换来以可用的形式获得他们想要的价值。所以,像(int)$xml->attributes()->'CLASSID' 得到3(array)$xml->attributes()->'CLASSID' 得到Array[0]=>3。这样合适吗? 是的,这似乎是 php 处理这些情况的方式。 PHP 是动态转换,所以它应该在运行中进行,但它可能有 xml 数据或其他问题。 现在已经足够好了! (但似乎 ppl 访问此值的方式有多种变体 - 有些比其他的更长更丑) 这不是真的 - @attributes 只是 SimpleXML 显示 XML 元素的属性 当使用print_rvar_dump 输出时的方式等。该对象具有$node->tag(访问子元素)和$node['attr'](访问属性)的“重载”功能。内部对象不是普通的 PHP 对象,将其视为一个对象会误导您。 @Youn 关于强制转换,这通常是必要的,以避免混淆期望实际字符串或 int 的代码; echo $xml['CLASSID']; 可以正常工作,但是如果您传递 $xml['CLASSID'],它仍然是链接到原始 XML 文档的对象,这可能是不可取的(例如,它不能通过 serialize() 运行,或者保存在会话中)。因此,$class_id = (string)$xml['CLASSID']$class_id = (int)$xml['CLASSID'] 通常更安全。

以上是关于XML:啥是“@attributes”节点[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中dom4j解析xml文件怎么获取节点属性

解析特定的 XML [重复]

数据结构问题 在邻接表中啥是表节点?啥是表头节点?啥是头节点?

使用 javascript 从 XML 字符串中获取节点值

C# 怎样获取xml某节点所有属性?

如何获取值元素 [@attributes] [重复]