2017-06-06 4 views
0

は、我々は、この形式のXMLファイルを持っている:へのアクセス要素の内容とSimpleXMLをパーサと名前空間の属性は

<Quiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <id>0</id> 
    <title>Ganz Anderer Titel</title> 
    <questions> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage1</title> 
     <id>0</id> 
     <rightAnswer>1</rightAnswer> 
    </Question> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage2</title> 
     <id>1</id> 
     <rightAnswer>2</rightAnswer> 
    </Question> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage2</title> 
     <id>2</id> 
     <rightAnswer>3</rightAnswer> 
    </Question> 
    </questions> 
    <expireDate>2018-06-06T00:00:00</expireDate> 
</Quiz> 
我々は今、このXMLファイルを解析する必要があるが、我々はコンテンツや属性にアクセスすることができません

の質問要素の。

SimpleXMLパーサーを組み込んだPHP 7を使用しています。

echo json_encode($xml->questions); 

表示する。この

{"Question":[{"title":"Frage1","id":"0","rightAnswer":"1"},{"title":"Frage2","id":"1","rightAnswer":"2"},{"title":"Frage2","id":"2","rightAnswer":"3"}]} 

が、我々は個別に各質問のデータを取得する方法は考えています。

+1

単純なforeachを使用してください。 –

+0

データ構造を示すべき簡単な 'print_r($ xml-> questions)'を試してください。 – RiggsFolly

+0

ありがとう。 print_rは多くの助けになりました。任意のアイデアはどのように各質問のxsi属性を取得するには? –

答えて

0

コメントに示唆されているように、単純なforeachループでは、リストの各項目をループすることができます。名前空間の属性を取得するには、

$xml = <<< XML 
<Quiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <id>0</id> 
    <title>Ganz Anderer Titel</title> 
    <questions> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage1</title> 
     <id>0</id> 
     <rightAnswer>1</rightAnswer> 
    </Question> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage2</title> 
     <id>1</id> 
     <rightAnswer>2</rightAnswer> 
    </Question> 
    <Question xsi:type="ChoiceQuestion"> 
     <title>Frage2</title> 
     <id>2</id> 
     <rightAnswer>3</rightAnswer> 
    </Question> 
    </questions> 
    <expireDate>2018-06-06T00:00:00</expireDate> 
</Quiz> 
XML; 

$x = new SimpleXMLElement($xml); 
foreach ($x->questions->Question as $q) { 
    printf(
     "Question %d:\nType:%s\nTitle:%s\nRight answer:%s\n", 
     $q->id, 
     $q->attributes("xsi", true)->type, 
     $q->title, 
     $q->rightAnswer 
    ); 
} 
関連する問題