3

SimpleXMLで取得したデータを処理しようとしていますが、非常に困難です。私はこの主題についてここで多くのスレッドを読みました、それらはすべて私がしていることのように見えます、しかし私のものは機能していません。これが私が持っているものです:

<ROOT>
    <ROWS COMP_ID="165462">
    <ROWS COMP_ID="165463">
</ROOT>

私のコード:

$xml = simplexml_load_file('10.xml');
foreach( $xml->ROWS as $comp_row ) {
    $id = $comp_row->COMP_ID;
}

デバッガーでこれを実行すると、$ idがCOMP_IDの文字列値に設定されていないことがわかりますが、CLASSNAMEオブジェクトを含むSimpleXMLElement自体になります。この属性に対処するためのさまざまなバリエーションを試しましたが、$ comp_row-> attributes()-> COMP_IDなど、どれも機能しません。

私は何が欠けていますか?

4

2 に答える 2

6

SimpleXML は配列のようなオブジェクトです。カンニングペーパー:

  • 数値インデックスまたはトラバース可能としての 接頭辞なしの子要素
    • 接頭辞付きの要素は含まれません (、私は実際にはnull-namespaceではなく、prefixedを意味します!名前空間の処理は奇妙で、間違いなく壊れています。)SimpleXMLElement
    • 第一子:$sxe[0]
    • SimpleXMLElement一致する要素のサブセットを持つ新しい: $sxe->ROWS$sxe->{'ROWS'}
    • 子を繰り返す: foreach ($sxe as $e),$sxe->children()
    • テキストの内容: (string) $sxe. SimpleXMLElement常に別のを返すSimpleXMLElementため、文字列が必要な場合は明示的にキャストしてください。
  • 接頭辞付きの子要素:
    • $sxe->children('http://example.org')前のセクションのように使用できるように、名前空間が削除されSimpleXMLElementた、一致する名前空間内の要素を持つ new を返します。
  • キー インデックスとして の null 名前空間の属性:
    • 特定の属性: `$sxe['attribute-name']
    • すべての属性:$sxe->attributes()
    • $sxe->attributes()属性を子要素と属性の両方SimpleXMLElementとして表示するスペシャルを返すため、次の両方が機能します。
    • $sxe->attributes()->COMP_ID
    • $a = $sxe->attributes(); $a['COMP_ID'];
    • 属性の値: 文字列への強制(string) $sxe['attr-name']
  • 他の名前空間の属性:
    • すべての属性:$sxe->attributes('http://example.org')
    • 特定の属性:$sxe_attrs = $sxe->attributes('http://example.org'); $sxe_attrs['attr-name-without-prefix']

あなたが望むものは:

$xml = '<ROOT><ROWS COMP_ID="165462"/><ROWS COMP_ID="165463"/></ROOT>';

$sxe = simplexml_load_string($xml);

foreach($sxe->ROWS as $row) {
    $id = (string) $row['COMP_ID'];
}
于 2013-01-20T04:04:32.703 に答える
3

あなたは間違っている...

foreach( $xml->ROWS as $comp_row ) {
    foreach ($comp_row->attributes() as $attKey => $attValue) {
        // i.e., on first iteration: $attKey = 'COMP_ID', $attValue = '165462'
    }
}

PHP マニュアル: SimpleXMLElement::attributes

于 2013-01-20T01:49:20.873 に答える