2010-06-14 15 views
5

YO SOY tiene el siguiente archivo XMLleer la etiqueta de identificación XML desde 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> 

en este archivo XML que necesito a buscar a los contenidos mediante el TagID. lo que necesito exactamente es que cuando ingreso el 'TopMakeHomepage' necesito salida como 'Mache 4W Consulting Webseite zu deiner Starseite!' ... Por favor, ayúdame a descubrir esto. Gracias de antemano

Respuesta

4

Uso SimpleXML:

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

O utilice XMLReader, con el que puede perderse pérdidas de memoria al procesar grandes XMLs.

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

Con la DOM extension que debe ser algo como esto:

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

consulte el manual


Si no funciona con getElementById (que por lo general sólo ocurre si el DTD no conoce el atributo id), todavía se puede utilizar XPath hacer la consulta:

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

A diferencia getElementById, un XPath query siempre devuelve un DOMNodeList. Estará vacío si la consulta no encontró ningún nodo.


Si el ID es un verdadero Identificación XML, también puede utilizar la función() id en XPath

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

Ver Simplify PHP DOM XML parsing - how? para más detalles sobre los identificadores XML.

2

Para SimpleXML esto debe hacer el truco:

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