2016-03-28 13 views
0

11 xml要素'n' xml要素から取得しようとしています。私はidがすべてのxml要素に対してユニークな11のIDを持っています。xmlデータから文字列としてXML要素を取得する(XMLデータから検索する)

Iプレイヤ要素の 'n' 個の数の指定されたXMLデータからIは、以下のXMLデータを解析する必要があるPHP

$xml = simplexml_load_string($j[0]); // $j[0] contains 'n' number of xml elements. I need to get 11 xml elements with 11 different ids. 

$doc = new DOMDocument(); 
$doc->loadXML($j[0]); 
$players = $doc->getElementsByTagName('player'); 

$j[0]

<testsquad> 
    <team name="team1" abbr="t1" > 
     <tplayers> 
      <player name="player1" id="1"/> 
      <player name="player2" id="2"/> 
      <player name="player3" id="3"/> 
      <player name="player4" id="4"/> 
      <player name="player5" id="5"/> 
      <player name="player6" id="6"/> 
      <player name="player7" id="7"/> 
      <player name="player8" id="8"/> 
      <player name="player9" id="9"/> 
      <player name="player10" id="10"/> 
      <player name="player11" id="11"/> 
      <player name="player12" id="12"/> 
      <player name="player13" id="13"/> 
      <player name="player14" id="14"/> 
      <player name="player14" id="14"/> 
     </tplayers> 
    </team> 
</testsquad> 

を使用しています、私が必要わずか11の要素を得る。

私はPHPでxmlデータを検索するのと混同しています。

var_dump($doc->loadXML($j[0]));を実行すると、次のエラーが発生します。

警告:のDOMDocument :: loadXML():入力私は間違っているつもりです

として供給された空の文字列?。私の質問がはっきりしないかどうかコメントしてください。

指定されたxmlデータには、以下のようなヘッダーがありません。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

が理由ということ、空の文字列を入力として供給言っているのですか?

+1

「私には11 idsがあります」 - 明確にするために:あなたは実際に '$ ids = [1,3,5,7,9,11,13、...]'のようなリストを持っています。ドキュメント/ domから対応するプレーヤ要素を選ぶ? – VolkerK

+0

'$ j [0]'がXMLの上にある場合、**上記のエラーはありません(または少なくともあなたの例ではコードを参照していません)。 'simplexml_load_string'コメントには、「$ j [0]にはn個のxml要素が含まれています」というように、' $ doc-> loadXML($ j [0] [0]); ' (しかし、この場合は、 "パラメータ1が文字列であること、array given"となるようなエラーを得るべきです) – fusion3k

+0

@VolkerK厳密に – Gunaseelan

答えて

0

私が代わりのDOMDocumentのSimpleXMLElementxpathを使用して、私は、結果として、単純なXML要素オブジェクトを得ました。

以下のコードを確認してください。

$player_id_list = array(1,3,5,7,9,11,13,15,17,19,21); 
$xml=new SimpleXMLElement($j[0]); 
foreach($player_id_list as $new_player_id) 
{ 
    $result = $xml->xpath("team/PlayerDetails/player[@id=".$new_player_id."]"); 
    echo "<pre>"; 
    var_dump($result); 
    echo "</pre>"; 
} 
0

DOMDocument :: loadXml()に空の文字列を指定したというエラーメッセージが表示されます。実際には$j[0]にXML文字列が含まれていることを検証します。

XPathは結果を制限するために使用することができます。

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 

foreach ($xpath->evaluate('//tplayers/player[position() <= 3]/@name') as $attribute) { 
    var_dump($attribute->value); 
} 

Output

string(7) "player1" 
string(7) "player2" 
string(7) "player3" 
関連する問題