1

基本的な属性を含む単純なxml文字列を解析しようとしています

<hash>
<engine-type>
I4 DI
</engine-type>
<body-style>
SAV 4D
</body-style>
<year>
2012
</year>
</hash>

xdebugがエラーを出すエンジンタイプとボディスタイルの2つの属性を出力しようとしたときに問題が発生しました

$result = simplexml_load_string($query);
$enginetype = $result->engine-type;
$bodystyle = $result->body-style ;
echo $enginetype .'<br />'. $bodystyle ;

これらはxdebugから発生したエラーです

Notice: Use of undefined constant type - assumed 'type'
Notice: Use of undefined constant style - assumed 'style

それらをデータベースに保存しようとすると、値0
の他の属性は正常に機能します

4

3 に答える 3

3

カーリー複雑な構文を使用して、特殊文字で識別子を表します。

$enginetype = $result->{'engine-type'};
$bodystyle = $result->{'body-style'} ;
于 2013-01-19T18:27:30.943 に答える
2

engine-typePHP では有効なラベル名ではないため、オブジェクトのプロパティを参照するために直接使用することはできません。

PHP では、中かっこ構文を使用して「変数プロパティ」を使用できます。これは、式の結果としてプロパティ名を受け入れます。その式は、文字列と同じくらい単純にすることができます。

$result->{'engine-type'};

これにより、次のようにプロパティ名を動的に構築できます (この場合は必要ありません)。

$var = 'bar';
$result->{'foo-'.$var};

この構文の例は、質問とまったく同じ種類のシナリオを扱っており、SimpleXML Basic Usageマニュアル ページの例 #3として現在利用できます。

例3 取得<line>

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie->{'great-lines'}->line;
?>

上記の例では、次のように出力されます。

PHP は私のすべての Web 問題を解決します

于 2013-01-19T18:37:01.300 に答える
1

問題は、式が変数$result->engineから定数を引いたものとして解釈されていることtypeです。これを試してみてください:

var_dump($result->{'engine-type'});

于 2013-01-19T18:26:58.243 に答える