2016-03-28 12 views
0

Ich versuche 11 XML-Elemente zu erhalten von einem 'n' Anzahl von XML-Elementen. Ich habe 11 IDs, wobei id für alle XML-Elemente eindeutig ist.XML Element als String von XML-Daten importieren (Suchen Sie in XML-Daten) in php

Ich bin mit 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'); 

Ich muss durch die folgenden XML-Daten ($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> 

Aus den angegebenen XML-Daten mit 'n' Anzahl der Spieler Elemente analysieren, ich brauche um nur 11 Elemente zu bekommen.

Ich bin verwirrt mit der Suche durch XML-Daten mit PHP.

Wenn ich die var_dump($doc->loadXML($j[0])); mache, habe ich den folgenden Fehler.

Warning: DOMDocument :: loadXML(): Leere Zeichenfolge als Eingabe geliefert

Wo ich falsch werde ?. Bitte kommentieren Sie, wenn meine Frage nicht klar ist.

Die angegebenen XML-Daten haben nicht den Header wie unten.

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

Ist das der Grund, es Leere Zeichenfolge als Eingabe geliefert sagt?

+1

"Ich habe 11 IDs" - nur zur Klarstellung: Sie haben tatsächlich eine Liste wie '$ IDs = [1,3,5,7,9,11,13, ...]' und Sie wollen die entsprechenden Spielerelemente aus dem Dokument/dom auswählen? – VolkerK

+0

Wenn '$ j [0]' über XML steht, kann ** ** nicht über dem obigen Fehler liegen (oder bezieht sich zumindest nicht auf Code in Ihrem Beispiel). Im 'simplexml_load_string' Kommentar schreiben Sie:" $ j [0] enthält 'n' Anzahl von XML Elementen ", also müssen Sie vielleicht versuchen $ doc-> loadXML ($ j [0] [0]);'? (In diesem Fall sollten Sie jedoch einen Fehler erhalten, wie "erwartet, dass Parameter 1 eine Zeichenfolge ist, ein Array gegeben ist") – fusion3k

+0

@VolkerK Genau – Gunaseelan

Antwort

0

I verwendet SimpleXMLElement ‚s xpath statt DOMDocument und ich habe das Einfache XML-Element-Objekt als Ergebnis.

Überprüfen Sie den folgenden Code.

$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

Die Fehlermeldung besagt, dass Sie eine leere Zeichenfolge für DOMDocument :: loadXml() angegeben haben. Überprüfen Sie, dass $j[0] tatsächlich die XML-Zeichenfolge enthält.

XPath kann das Ergebnis zu begrenzen verwendet werden:

$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"