我已经看过几次这个问题了,想要一个明确的答案。
在xml:
中给出这个结构<ByteListSet>
<Byte Order="0">14</Byte>
</ByteListSet>
我无法访问属性'order'。 var_dump(毫不奇怪)没有显示ByteListSet的任何属性。实际上,foreach迭代不会生成@attributes项。
但是,结构如下:
<ByteListSet>
<Byte Order="0"><Value>3729</Value></Byte>
</ByteListSet>
在具有子字节的ByteListSet中正确结果,该字节是具有@attributes的SimpleXmlObject。
我认为SimpleXML确实从第一个案例中获取了@attributes,但它在哪里保留它们?麻烦的是,在前一个结构中,ByteListSet在var_dump上产生了这个 - &gt; children():
object(SimpleXMLElement)[25]
public 'Byte' => string '14' (length=2)
如果我上面有get_object_vars()和var_dump,我只是得到:
string '14' (length=2)
表示Byte不是作为xml对象返回给我的,而是作为字符串返回给我;作为它上面的ByteList对象的属性。
Order =“0”在某处,但我无法访问它。我怎么做到的?注意: - &gt; attributes()如您所料返回一个空白数组。
(我们不控制此架构,因此无法对其进行重组。)
答案 0 :(得分:0)
您写道:
在xml:
中给出这个结构<ByteListSet> <Byte Order="0">14</Byte> </ByteListSet>
我无法访问属性&#39; order&#39;。
当然,因为属性order
不存在。 XML is case-sensitive,该属性的名称为Order
,开头为大写O
。
使用正确的属性名称,您可以在手册中找到Example #5 in the basic examples of the SimpleXML extension中的大纲中访问该值:
$ByteListSet = simplexml_load_string(<<<XML
<ByteListSet>
<Byte Order="0">14</Byte>
</ByteListSet>
XML
);
echo $ByteListSet->Byte['Order']; # 0
请注意,您在var_dump
或print_r
中看到的内容并非总是如此。这对于Simplexml(比较:How to get values of xml elements?; SimpleXML and print_r() - why is this empty?)尤其如此,对于PHP中使用ArrayAccess
,__toString()
或{{3}的其他对象也是如此} / IteratorIterator
。
如果能回答你的问题,请告诉我。你不是很清楚到目前为止你还没有明白哪些现有的解决方案,所以我回答了你的问题,但如果我发现这个问题,我不是100%。