прочитайте идентификатор 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 Консалтинг на 4 Вт с денье Webseite zu Starseite!'... Помогите мне узнать это.Заранее спасибо

5
задан Sakthivel 14 June 2010 в 09:02
поделиться

3 ответа

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

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

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


Если он не работает с 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;
}

См. Упростить синтаксический анализ PHP DOM XML - как? для получения дополнительных сведений об идентификаторах XML.

4
ответ дан 13 December 2019 в 22:02
поделиться

Используйте 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');
}
4
ответ дан 13 December 2019 в 22:02
поделиться

Для SimpleXML это должно помочь:

$xml = simplexml_load_file($xmlFileLoc);
foreach ($xml->Message as $msg)
{
    echo $msg['Id'];
}
2
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: