2

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<lessons>
    <lesson level="1" course="2">
                 <name type="Dog" category="Animals">Dog name</name>
          </lesson>
</lessons>

次のように保存された値を取得したい:

$type = "Dog";
$category = "Animals";
$name = "dog name";

これは私がやったことです:

    foreach($xml->name as $name){
        $type = $name['type'];
        $category = $name['category'];

        echo "Type: $type Category: $category<br>";
        // AND TO get the text, haven't figuered it out yet.. <name ..="" ..="">text</name>
    }

しかし、うまくいきません。エラーも出力もありません。何か案は?

編集:わかりました。foreach($xml->name as $name) を変更しました

to foreach($xml->lesson->name as $name)

そのため、属性の値を取得します。しかし、今では子供たちの価値を得る方法がわかりません。私はこれを試しました: $xml->lesson->children()

children() を出力します

解決済み: $text = $xml->lesson->children(); $テキストをエコーし​​ます。

問題: 他のコードで utf-8 を使用していますが、変更していません。

4

2 に答える 2

1

編集:この部分は質問のタイプミスに関連しています。 xml を編集していた場所から直接コピーした場合、問題の一部は形式が正しくないことにある可能性があります。開口部<lessons>がありますが、誤って で閉じようとしているよう</lesson>です。

また、ルート ノードの設定によって->nameは、$xml オブジェクトの子である場合とそうでない場合があります。それを投稿して、var_dump()手がかりを得ることができますか?

于 2012-10-26T04:00:39.927 に答える
1

あなたのxmlに問題があると思います。

-> レッスン タグを正しく閉じる必要が</lesson>あり</lessons>ます。タグを開始する場合は、終了時に同じタグ名を使用する必要があります..

このコードを使用して、xml から値を抽出できます。

<?php

$xmlstring='<lessons>
    <lesson level="1" course="2">
                 <name type="Dog" category="Animals">Dog name</name>
          </lesson>
</lessons>';

$xml = simplexml_load_string($xmlstring);
$ATTRIBUTE=array();
$counter = 0;
foreach($xml->children() as $key=>$child)
  {
    $counter++;
    $ATTRIBUTE[$counter]["type"]=$child->name->attributes()->type;
    $ATTRIBUTE[$counter]["category"]=$child->name->attributes()->category;
    $ATTRIBUTE[$counter]["value"]= $child->name;
  }

echo "<pre>";
print_r($ATTRIBUTE);
?>

ここでは、すべてを配列で取得します。したがって、要件に基づいて取得できます。

于 2012-10-26T04:12:36.257 に答える