这是$v
的转储,其中包含
object(SimpleXMLElement)[69]
public '@attributes' =>
array
'identifier' => string 'FC7C5117-8FF9-4FF4-86D2-F139EDE6EA74-19726-00011178F6D7A5AC' (length=59)
'fileext' => string 'pdf' (length=3)
public 'title' => string 'The PDF File' (length=12)
public 'summary' => string 'Summary for the pdf file stuff' (length=30)
public 'tags' =>
object(SimpleXMLElement)[70]
public 'tag' => string 'PDFTag' (length=6)
public 'timeSignature' =>
object(SimpleXMLElement)[71]
public '@attributes' =>
array
'upper' => string '4' (length=1)
'lower' => string '4' (length=1)
public 'key' => string 'C' (length=1)
public 'transposition' => string 'PDF Trans' (length=9)
public 'bpm' => string '120' (length=3)
public 'defaultAudio' => string '57895336-6D03-41B4-954C-91DA3F512185-19726-00011178DFE613C5' (length=59)
我做
foreach ($v as $k1 => $v1)
{
var_dump($k1);
var_dump($v1);
}
它从title
title
object(SimpleXMLElement)[74]
string 'The PDF File' (length=12)
summary
object(SimpleXMLElement)[72]
string 'Summary for the pdf file stuff' (length=30)
tags
object(SimpleXMLElement)[74]
public 'tag' => string 'PDFTag' (length=6)
timeSignature
object(SimpleXMLElement)[72]
public '@attributes' =>
array
'upper' => string '4' (length=1)
'lower' => string '4' (length=1)
key
object(SimpleXMLElement)[74]
string 'C' (length=1)
transposition
object(SimpleXMLElement)[72]
string 'PDF Trans' (length=9)
bpm
object(SimpleXMLElement)[74]
string '120' (length=3)
defaultAudio
object(SimpleXMLElement)[72]
string '57895336-6D03-41B4-954C-91DA3F512185-19726-00011178DFE613C5' (length=59)
我错过了什么?为什么跳过@attributes
?
答案 0 :(得分:1)
SimpleXML是PHP中另一个奇怪的不一致,它有点独特。它紧密集成在PHP核心中,并显示一些PHP中没有其他类的特性,包括本机类,例如它代表了与converting to boolean相关的特殊情况。
我可以整天关注SimpleXML的奇怪之处,但为了切入追逐,@attributes
实际上向您显示SimpleXMLElement
{{1}}方法的结果,转换为数组。它实际上不是财产。
我个人更喜欢使用attributes()
来处理与DOM相关的所有事情,因为虽然它更臃肿和啰嗦,但我发现它并没有做我不期望的事情,SimpleXML就是这样做的。这主要是用户错误/心理障碍,但它加上略微不充分的文档和一些非标准的部分 - 例如你在这里遇到的那些。
答案 1 :(得分:1)
为什么跳过
@attributes
?
将foreach
与 XML元素的 SimpleXMLElement
对象一起使用只是循环遍历元素的集合,而不是任何属性(确切地说是哪些元素是iterated取决于访问对象的方式;它可以是具有特定本地名称的所有子元素或子元素。)
如果您希望foreach
超过元素的属性,请使用foreach($v->attributes() as $name => $value)
方法,例如SimpleXMLElement
。此方法返回属性的attributes()
对象,可以迭代。
值得一提的旁注是,如果您只想访问属性,则不需要$v['attribute_name']
;