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 におけるもう 1 つの奇妙な矛盾であり、ややユニークです。これは PHP コア内に緊密に統合されており、ネイティブ クラスを含む PHP の他のクラスが表示しないいくつかの特徴を表示します。たとえば、boolean への変換に関連する特殊なケースを表します。

SimpleXML の奇妙な点について 1 日中口論することもできましたが、端的に言えば、配列に変換されたのメソッドの@attributes結果を実際に示しています。実際にはプロパティではありません。attributes()SimpleXMLElement

個人的には、DOM 関連のすべてに DOM を使用することを好みますなぜなら、DOM はより肥大化して長々としたものですが、SimpleXML が行う、期待していないことをしないからです。これは主に私の側のユーザーエラー/メンタルブロックですが、わずかに不十分なドキュメントといくつかの非標準性が組み合わされています-ここで遭遇したものなど.

于 2012-07-26T16:49:36.017 に答える
1

なぜスキップするの@attributesですか?

XML 要素のオブジェクトを使用foreachすると、要素のコレクションのみがループされ、属性はまったくループされません (どの要素が繰り返されるかは、オブジェクトへのアクセス方法によって異なります。すべての子要素または特定のローカル名を持つ子要素である可能性があります)。 SimpleXMLElement

foreach要素の属性を上書きしたい場合は、 のattributes()ようなメソッドを使用しforeach($v->attributes() as $name => $value)ます。このメソッドは、SimpleXMLElement反復可能な属性のオブジェクトを返します。


言及する価値のある副次的な注意は、attributes()単に属性にアクセスしたい場合は必要ないということです。配列スタイルの構文$v['attribute_name']を使用できます。

于 2012-07-27T08:00:02.560 に答える