1

这是$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

4

2 回答 2

1

SimpleXML 是 PHP 中又一个奇怪的不一致性,它有些独特。它与 PHP 核心紧密集成,并显示一些 PHP 中没有其他类(包括本机类)显示的特征 - 例如,它代表与转换为 boolean相关的特殊情况。

我可以整天喋喋不休地谈论 SimpleXML 的怪异之处,但切入正题,@attributes实际上是向您展示 的attributes()方法的结果SimpleXMLElement,转换为数组。它实际上不是财产。

我个人更喜欢将DOM用于与 DOM 相关的所有内容,因为虽然它更臃肿且冗长,但我发现它并没有做我没有预料到的事情,而 SimpleXML 会。这主要是我的用户错误/心理障碍,但它伴随着稍微不充分的文档和一些不标准的点点滴滴——比如你在这里遇到的那个。

于 2012-07-26T16:49:36.017 回答
1

为什么会跳过@attributes

foreachXML 元素的 对象一起使用SimpleXMLElement只会循环遍历元素集合,而不是任何属性(确切地迭代哪些元素取决于访问对象的方式;它可以是所有子元素或具有特定本地名称的子元素)。

如果要foreach覆盖元素的属性,请使用attributes()类似foreach($v->attributes() as $name => $value). 此方法返回SimpleXMLElement属性的对象,可以对其进行迭代。


值得一提的是,attributes()如果您只是想访问属性,则不需要这样做。$v['attribute_name']可以使用数组样式的语法。

于 2012-07-27T08:00:02.560 回答