2010-06-14 6 views
5

ich habe bin die folgende XML-Dateilesen XML-Tag-ID von php

<?xml version="1.0" encoding="iso-8859-1"?> 

<Message Id="Language">German</Message> 
    <Message Id="LangEnglish">German</Message> 

    <Message Id="TopMakeHomepage"> 
     Mache 4W Consulting Webseite zu deiner Starseite! 
    </Message> 
    <Message Id="TopLinkEmpSec"> 
     4W Mitarbeiter 
    </Message> 
    <Message Id="TopLinkFeedback"> 
     Feedback 
    </Message> 
    <Message Id="TopLinkSiteMap"> 
     Site Map 
    </Message> 
    <Message Id="TopLinkContactUs"> 
     Kontakt 
    </Message> 
    <Message Id="TopSetLangEn"> 
     ins Englische 
    </Message> 
    <Message Id="TopSetLangDe"> 
     ins Deutsche 
    </Message> 
    <Message Id="TopSetLangEs"> 
     ins Spanische 
    </Message> 
    <Message Id="MenuLinks"> 
     !~|4W Starseite|Company|Über uns|Kontakt|4W anschließen|Services|Kunden Software Entwicklung|Altsystem Neugestalltung &amp; Umwandlung|Altsystem Dokumentation|Daten Umwandlung &amp; Migration|Erstellen von Datenbeschreibungsverzeichnis|System- &amp; Anwendungs Support|Projekt Management &amp; Planunng|Personal Erweiterung|Projekt Ausgliederung|Mitarbeiter Ausbildung|Technologie|Intersystems Caché|M/MUMPS|Zusätzliche Technologien|Methodologie|Feedback|~! 
    </Message> 
</MsgFile> 

in dieser XML-Datei i den Inhalt holen müssen, um die MarkierungslD verwenden. was genau ich brauche ist, wenn ich die 'TopMakeHomepage' eingib, die ich als 'Mache 4W Consulting Webseite zu deiner Starseite!' ... Bitte helfen Sie mir, dies herauszufinden. Vielen Dank im Voraus

Antwort

4

Verwendung SimpleXML:

$xml = simplexml_load_file($grabUrl); 
foreach ($xml->Message as $message) { 
    echo $message->attributes()->Id.'<br />'; 
} 

Oder verwenden XMLReader, mit dem Sie Speicherleck verfehlen, wenn große XMLs Verarbeitung.

$xml = new XMLReader; 
$xml->open($grabUrl); 
while ($xml->read()) { 
    if ($xml->nodeType === XMLReader::ELEMENT && $xml->name == 'Message') 
     echo $xml->getAttribute('Id'); 
} 
4

Mit dem DOM extension sollte es so etwas wie dieses:

$dom = new DOMDocument; 
$dom->validateOnParse = TRUE; 
$dom->loadXML($xmlString); // or use ->load('file.xml') 
$node = $dom->getElementById('foo'); 
echo $node->nodeValue; 

finden Sie im Handbuch auf


Wenn es nicht mit getElementById (was geschieht in der Regel nur dann, wenn die DTD das id-Attribut nicht kennt) nicht funktioniert, können Sie immer noch XPath verwenden, um die Abfrage zu tun:

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//Message[@id = "foo"]'); 
foreach($nodes as $node) { 
    echo $node->nodeValue; 
} 

Im Gegensatz zu getElementById, ein immer XPath query gibt eine DOMNodeList zurück. Es wird leer sein, wenn die Abfrage keine Knoten gefunden hat.


Wenn die ID eine echte XML-ID ist, können Sie auch die ID verwenden() Funktion in XPath

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('id("foo")'); 
foreach($nodes as $node) { 
    echo $node->nodeValue; 
} 

Siehe Simplify PHP DOM XML parsing - how? für weitere Details über XML-IDs.

2

Für SimpleXML dies den Trick tun sollten:

$xml = simplexml_load_file($xmlFileLoc); 
foreach ($xml->Message as $msg) 
{ 
    echo $msg['Id']; 
}