3

次のように、2 つのダッシュを含むタグを含む xml ドキュメントがあります<item--1>。このドキュメントを解析するために SimpleXML を使用しているので、タグの名前を持つオブジェクト プロパティが得られます。これは明らかに問題です。ダッシュは変数名とプロパティ名には無効な文字であるためだと思います。

<?php

$xml = "<data><fruits><item>apple</item><item--1>bananna</item--1></fruits></data>";

$xml = simplexml_load_string($xml);

foreach( $xml->children() as $child ) {
  var_dump($child->item);
#  var_dump($child->item--1);
}

これを実行すると、

object(SimpleXMLElement)#5 (1) {
  [0]=>
  string(5) "apple"
}

しかし、最後の行 (ダッシュが 2 つある xml 要素) のコメントを外すと、エラーが発生します。

PHP Parse error:  syntax error, unexpected T_LNUMBER in test.php on line 17

中括弧を使用してみました:

var_dump($child->{item--1});

しかし、それは私にこのエラーを与えただけです:

PHP Parse error:  syntax error, unexpected T_DEC

これはデクリメント演算子、または--です。

このオブジェクトのプロパティを参照するにはどうすればよいですか?

4

2 に答える 2

7

中括弧を使用したアプローチはそれほど間違っていませんでしたが、中括弧の間に文字列が必要です。

var_dump($child->{'item--1'});
于 2012-09-06T22:35:43.763 に答える
1

オブジェクトのマニュアルのページから:SimpleXMLElement

ハイフンを含むキー名で XML を解析しようとする人には警告します。)

<subscribe>
  <callback-url>example url</callback-url>
</subscribe>

callback-url にアクセスするには、次のようにする必要があります。

<?php
  $xml = simplexml_load_string($input);
  $callback = $xml->{"callback-url"};
?>

中括弧と引用符なしで実行しようとすると、必要なものではなく 0 が返されることがわかります。

于 2012-09-06T22:35:40.810 に答える