2010-06-14 6 views
5

je suis avoir le fichier XML suivantlire id tag XML de 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> 

dans ce fichier XML que je dois récupérer le contenu à l'aide du tagid. ce dont j'ai besoin exactement est quand j'introduis la 'page d'accueil de TopMake' j'ai besoin de la sortie en tant que 'Mache 4W consultant Webseite zu deiner Starseite! ... S'il vous plaît, aidez-moi à le savoir. Merci à l'avance

Répondre

4

utilisation SimpleXML:

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

Ou utilisez XMLReader, avec lequel vous pouvez manquer des fuites de mémoire lors du traitement de grandes XMLs.

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

Avec le DOM extension il devrait être quelque chose comme ceci:

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

Voir le manuel


Si cela ne fonctionne pas avec getElementById (ce qui arrive souvent que si la DTD ne connaît pas l'attribut id), vous pouvez toujours utiliser XPath pour faire la requête:

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

Contrairement getElementById, un XPath query toujours renvoie un DOMNodeList. Il sera vide si la requête n'a trouvé aucun noeud.


Si l'ID est un véritable ID XML, vous pouvez également utiliser la fonction id() dans XPath

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

Voir Simplify PHP DOM XML parsing - how? pour plus de détails sur ID XML.

2

Pour SimpleXML cela devrait faire l'affaire:

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