2011-01-06 1 views
0

Ich bin ein bisschen neu in XML, aber ich kann mit einigen Dingen umgehen. Unterhalb gibt es einen Code, der Wert von einem HTML-Formular erhält und dann einige Informationen aus einer XML-Datei anzeigt (siehe unten). Der Code zeigt alle Informationen korrekt an (TITLE, BAND, YEAR), aber meine Frage ist, wie ich auch das ID-Attribut <CD id="XXX"> anzeigen kann. Vielen Dank!Einfache Frage, wie XML-Attribut auf einen bestimmten Code angezeigt wird

der Code

<?php 
$q=$_GET["q"]; 

$xmlDoc = new DOMDocument(); 
$xmlDoc->load("database.xml"); 

$x=$xmlDoc->getElementsByTagName('TITLE'); 

for ($i=0; $i<=$x->length-1; $i++) 
{ 
//Process only element nodes 
if ($x->item($i)->nodeType==1) 
    { 
    if ($x->item($i)->childNodes->item(0)->nodeValue == $q) 
    { 
    $y=($x->item($i)->parentNode); 
    } 
    } 
} 

$cd=($y->childNodes); 

for ($i=0;$i<$cd->length;$i++) 
{ 
//Process only element nodes 
if ($cd->item($i)->nodeType==1) 
    { 
    echo("<b>" . $cd->item($i)->nodeName . ":</b> "); 
    echo($cd->item($i)->childNodes->item(0)->nodeValue); 
    echo("<br />"); 
    } 
} 
?> 

XML

<CATEGORIES> 

<CD id="1"> 
<TITLE>NEVER MIND THE BOLLOCKS</TITLE> 
<BAND>SEX PISTOLS</BAND> 
<YEAR>1977</YEAR> 
</CD> 

<CD id="2">  
<TITLE>NEVERMIND</TITLE> 
<BAND>NIRVANA</BAND> 
<YEAR>1991</YEAR> 
</CD> 

</CATEGORIES> 

Antwort

1

Erstens wäre es schöner, diese Suche mit XPath zu tun. Die Abfrage, um ein TITLE Element zu finden, das den Inhalt foo hat, ist //TITLE[.="foo"]. Sie können dann DOMElement::getAttribute verwenden, um das gewünschte Attribut zu erhalten. So könnte Ihr Code wie folgt aussehen:

$dom = new DOMDocument; 
$dom->load("database.xml"); 
$xpath = new DOMXPath($dom); 

$el = $xpath->query('//TITLE[.="' . $q . '"]'); 

if ($el->length) { 
    $cd = $el->item(0)->parentNode; 

    echo "<b>ID:</b> " . $cd->getAttribute('id'); 

    foreach ($cd->childNodes as $node) { 
     if ($node->nodeType == 1) { 
      echo("<b>" . $node->nodeName . ":</b> "); 
      echo($node->nodeValue); 
      echo("<br />"); 
     } 
    } 
} 
+0

Großartig! Danke ! – JBEnergy

+0

@ user560411 Wenn diese (oder eine andere!) Antwort Ihre Frage beantwortet hat, können Sie die Frage als beantwortet markieren, indem Sie auf das leere Häkchen-Symbol links neben der Antwort klicken. Vielen Dank! – lonesomeday

0

Sie die Attribute einer DomNode retreive kann durch node- $ Aufruf> Attribute().

Weitere Informationen finden Sie die Dokumentation dieser Funktion: http://php.net/manual/en/function.domnode-attributes.php

+0

Hallo zusammen Ich habe versucht, es zu implementieren, aber ich kann es nicht richtig hinzufügen. Ich kann damit nicht richtig umgehen, weil es eine Funktion ist. – JBEnergy

1

Ein einfacher Weg, um mit XML umzugehen, ist SimpleXML wie folgt zu verwenden:

$xml = simplexml_load_file('database.xml'); 
foreach ($xml as $cd) { 
    echo 'ID: ' . $cd['id'] . '<br>'; 
    echo 'Title: ' . $cd->TITLE . '<br>'; 
    echo 'Band: ' . $cd->BAND . '<br>'; 
    echo 'Year: ' . $cd->YEAR . '<br>'; 
} 

http://docs.php.net/manual/en/simplexml.examples.php See.

+0

Vielen Dank für Ihre Antwort, aber ich würde gerne mit dem obigen Code bleiben und nur die ID-Attribut anzeigen .. – JBEnergy