簡體   English   中英

php xml xpath foreach獲取具有相同名稱的節點的值

[英]php xml xpath foreach to get values of nodes with same name

伙計們

我有這個xml代碼:

<items>
<item type="boardgame" id="84876">
<versions>
<item type="boardgameversion" id="317166">
<link type="boardgameversion" id="84876" value="The Castles of Burgundy" inbound="true"/>
<name type="primary" sortindex="1" value="Chinese Edition"/>
<link type="boardgamepublisher" id="9068" value="Broadway Toys LTD"/>
<link type="language" id="2181" value="Chinese"/>
</item>

<item type="boardgameversion" id="269360">
<link type="boardgameversion" id="84876" value="The Castles of Burgundy" inbound="true"/>
<name type="primary" sortindex="1" value="Hobby World Russian first edition"/>
<link type="boardgamepublisher" id="18852" value="Hobby World"/>
<link type="boardgameartist" id="11886" value="Julien Delval"/>
<link type="boardgameartist" id="4959" value="Harald Lieske"/>
<link type="language" id="2202" value="Russian"/>
</item>

<item type="boardgameversion" id="141049">
<link type="boardgameversion" id="84876" value="The Castles of Burgundy" inbound="true"/>
<name type="primary" sortindex="1" value="Ravensburger English/French Edition"/>
<link type="boardgamepublisher" id="9" value="alea"/>
<link type="boardgamepublisher" id="34" value="Ravensburger Spieleverlag GmbH"/>
<link type="boardgameartist" id="11886" value="Julien Delval"/>
<link type="boardgameartist" id="4959" value="Harald Lieske"/>
<link type="language" id="2184" value="English"/>
<link type="language" id="2187" value="French"/>
</item>

<item type="boardgameversion" id="69303">
<link type="boardgameversion" id="84876" value="The Castles of Burgundy" inbound="true"/>
<name type="primary" sortindex="1" value="Ravensburger Multilingual First Edition"/>
<link type="boardgamepublisher" id="9" value="alea"/>
<link type="boardgamepublisher" id="34" value="Ravensburger Spieleverlag GmbH"/>
<link type="boardgameartist" id="11886" value="Julien Delval"/>
<link type="boardgameartist" id="4959" value="Harald Lieske"/>
<link type="language" id="2184" value="English"/>
<link type="language" id="2187" value="French"/>
<link type="language" id="2188" value="German"/>
</item>

<item type="boardgameversion" id="134173">
<link type="boardgameversion" id="84876" value="The Castles of Burgundy" inbound="true"/>
<name type="primary" sortindex="1" value="Ravensburger Multilingual Second Edition"/>
<link type="boardgamepublisher" id="9" value="alea"/>
<link type="boardgamepublisher" id="34" value="Ravensburger Spieleverlag GmbH"/>
<link type="boardgameartist" id="11886" value="Julien Delval"/>
<link type="boardgameartist" id="4959" value="Harald Lieske"/>
<link type="language" id="2184" value="English"/>
<link type="language" id="2187" value="French"/>
<link type="language" id="2188" value="German"/>
</item>
</versions>
</item>
</items>

我想為每個版本項目獲取<link type="language"...>的值。

我的PHP代碼是:

$language = $xmlinfo2->item->versions->item;
$lang = $language->xpath('//link[@type="language"]');
$num = 1;

    foreach($language as $lang1) {
       echo $num . ". ";
         foreach ($lang as $lang2){
           $lang3 = $lang2->attributes();
           echo $lang3['value'] . ", ";
         }
         echo "<br>";
         $num++;
    }

其結果是(它寫出所有版本的所有語言):

  1. 中文,俄文,英文,法文,英文,法文,德文,英文,法文,德文,

  2. 中文,俄文,英文,法文,英文,法文,德文,英文,法文,德文,

  3. 中文,俄文,英文,法文,英文,法文,德文,英文,法文,德文,

  4. 中文,俄文,英文,法文,英文,法文,德文,英文,法文,德文,

  5. 中文,俄文,英文,法文,英文,法文,德文,英文,法文,德文,

如何更改我的PHP代碼才能獲得此結果?

  1. 中文

  2. 俄語

  3. 英文,法文

  4. 英文,法文,德文

  5. 英文,法文,德文

謝謝您的幫助!

您在這里遇到了幾個問題:

1)在xpath選擇器的開頭使用//表示從文檔中的任何位置獲取這些元素。 因此,每次循環時,您最終都會獲得所有項目中所有語言的列表。

2)您的xpath()調用需要位於循環內,否則它將在您正在查看的當前<item>上下文中不起作用。

因此,您可以使用類似:

foreach ($language as $lang1) {
    $lang = $lang1->xpath('link[@type="language"]');

    echo $num . ". ";

    foreach ($lang as $lang2){
        $lang3 = $lang2->attributes();
        echo $lang3['value'] . ", ";
    }

    echo "<br>";
    $num++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM