0

以下のような構造のxmlファイルを読み込もうとしています

<dictionary>
<head>

<DNUM />
<DEF value="definition1" />
<EXAMPLE value="example of 1" />
<EXAMPLE value="example of 1" />

<DNUM />
<DEF value="definition2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />
<EXAMPLE value="example of 2" />

<DNUM />
<DEF value="definition3" />
<EXAMPLE value="example of 3" />


</head>
</ dictionary>

以下のようなコードで、「head」タグ内のすべての定義または例を読み取ることができました

 $result = $xml->xpath('//dictionary/head');
 while(list( , $node) = each($result)) {
   foreach($node->DEF as $def){
        echo  $def["value"]."<br>\n";
   }
 }

しかし、私はそれぞれの定義とその定義の例を取得したいと考えています。これにはDNUMタグを使用できると思いますが、開始と終了が別々にないため、必要な結果を得る方法を見つけることができませんでした。

4

4 に答える 4

0

XML 構造は階層的ではないため、数えることしかできません。たとえば、次のDNUM要素の数:

$name     = 'DNUM';
$elements = $xml->xpath("//$name");
$count    = count($elements);
foreach ($elements as $index => $element) {
    $count--;
    echo "Iteration $index\n";
    foreach ($element->xpath("following-sibling::*[count(./following-sibling::$name) = $count]") as $following) {
        echo $following->asXML(), "\n";
    }
    echo "\n";
}

出力例:

Iteration 0
<DEF value="definition1"/>
<EXAMPLE value="example of 1"/>
<EXAMPLE value="example of 1"/>

Iteration 1
<DEF value="definition2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>
<EXAMPLE value="example of 2"/>

Iteration 2
<DEF value="definition3"/>
<EXAMPLE value="example of 3"/>
于 2013-02-15T23:40:08.827 に答える
0

あなたの質問を理解しているかどうかはわかりませんが、DEFとそのDEFの例を見つける必要がある場合は、次のようになります

    $result = $xml->xpath('//dictionary/head/DEF');
 while(list( , $node) = each($result)) {
   foreach($node->EXAMPLE as $example){
        echo  $example["value"]."<br>\n";
   }
 }
于 2013-02-15T19:26:03.457 に答える
0

SimpleXMLElement を使用しないのはなぜですか?

$sxe = new SimpleXMLElement($xml);

$def = $sxe->head->dictionary->DEF->attributes(); //you can foreach this
//or
$def = $sxe['head']['dictionary']['DEF']->attributes(); //you can foreach this

同様の方法で例を取得できます。SXE は、オブジェクトや配列のように使用でき、foreach を介して反復できます。

個人的には、SimpleXMLElement が XML と PHP を操作する最も簡単な方法だと思います。

さらに読む: http://www.php.net/manual/en/class.simplexmlelement.php

于 2013-02-15T19:35:36.467 に答える
0

私はこの方法で問題を解決しました。

$result = $xml->xpath('//dictionary/headword/*[name()="DEF" or name()="EXAMPLE"]');
 foreach($result  as $res){
     echo $res["value"]."<br>";
 }
于 2013-02-15T21:25:10.140 に答える