2016-07-25 160 views
0

傢伙,PHP的XML的XPath的foreach得到節點的值具有相同名稱的

我有這樣的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. 英語,法語,德語

謝謝你的幫助!

回答

0

你有一對夫婦的問題在這裏:

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++; 
} 
+0

它的作品真的很好。 謝謝你的代碼和你的描述!祝你有美好的一天! – Steve

相關問題