читать идентификатор тега XML из php

У меня есть следующий XML-файл

<?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> 

в этом XML-файле мне нужно получить содержимое с помощью tagid. что именно мне нужно, когда я ввожу «TopMakeHomepage», мне нужен вывод, как «Mache 4W Consulting Webseite zu deiner Starseite!» … Пожалуйста, помогите мне это узнать. заранее спасибо

Related of "читать идентификатор тега XML из php"

Использовать SimpleXML :

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

Или используйте XMLReader , с помощью которого вы можете пропустить утечку памяти при обработке больших XML.

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

С расширением DOM это должно быть примерно так:

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

См. Руководство по

  • DOMDocument::getElementById – Ищет элемент с определенным идентификатором

Если он не работает с getElementById (что обычно происходит только в том случае, если DTD не знает атрибут id), вы можете использовать XPath для выполнения запроса:

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

В отличие от getElementById , запрос XPath всегда возвращает DOMNodeList . Он будет пуст, если запрос не найдет ни одного узла.


Если идентификатор является реальным XML-идентификатором, вы также можете использовать функцию id () в XPath

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

См. Simplify PHP DOM XML parsing – как? для получения более подробной информации о XML-идентификаторах.

Для SimpleXML это должно сделать трюк:

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