1

次のように設定されたファイルを解析しています:

<blah-name name="Turkey">
<blah-city name="Test"/>
<CAPS>
  <type type="5">
  <type-two type="6">
</CAPS>

ファイルの先頭に、次のように $xmlobj を作成します。

$xmlobj = simplexml_load_file("TEST.XML");

次に、これらすべてをプロパティとして受け取るクラスを作成して、値をテーブルに挿入します。

$record->{'blah-city'}->attributes()->name;

ただし、大文字の XML を掘り下げようとすると、すべてが爆発します。

$record->{'CAPS'}->type->attributes()->type;

私のサーバーは上記の行で次のエラーで爆発します: Fatal error: Call to a member function attributes() on a non-objectそして、上記のコードが書かれたファイルの行をリストします。

私はやろうとしましたがvar_dump($record->{'CAPS'});、構造全体が値をそのままにして適切に存在することが示されています。

この問題を修正して作業を進める方法を知っている人はいますか? それは大歓迎です!

4

2 に答える 2

1

これを試しましたか:

$record->CAPS->type->attributes()->type;

ハイフンでつながれていないため、{'CAPS'} で囲まなくてもかまいません。

*以下の新しいコメントに従って編集します。

興味深い結果です。{'type-two'}->attributes()->id を追跡すると、適切な値が表示されました。

その場合、おそらく type->attributes()->type に問題があると思われます。PHP は同じ名前を持っているため、入力する内部メモリ参照の問題が発生する可能性があります。変更してみる

<type type="5">

<type-one type="5">

あなたのXMLで。これで問題が解決するはずです。その後、次のようにアクセスできます。

$record->{'CAPS'}->{'type-one'}->attributes()->type;

さらに、これを試しましたか?

$type_attributes = $record->{'CAPS'}->{'type-one'}->attributes();
$type_value = $type_attributes->type;

それはあなたの問題を解決する可能性があります。また、役立つ可能性のあるこのスタック オーバーフローのリンクも見つけました。

于 2009-09-04T05:18:15.243 に答える
0

上記の XML コードは有効な xml マークアップではありません。完全なファイルがどのように見えるかはわかりませんが、次の有効な xml ファイルを想定しています。

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <blah-name name="Turkey" />
    <blah-city name="Test" />
    <CAPS>
        <type type="5" />
        <type-two type="6" />
    </CAPS>
</data>

次の PHP コードは期待どおりに動作します。

$xmlobj = simplexml_load_file("TEST.XML");
$record = new stdClass();
foreach ($xmlobj as $key=>$value) {
    $record->$key = $value; 
}
var_dump($record->{'CAPS'});
于 2009-09-04T05:22:19.730 に答える