【问题标题】:read XML tag id from php从 php 读取 XML 标签 id
【发布时间】:2010-06-14 06:24:29
【问题描述】:

我有以下 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!” ... 请帮我找出这个。提前致谢

【问题讨论】:

    标签: php


    【解决方案1】:

    使用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');
    }
    

    【讨论】:

      【解决方案2】:

      DOM extension 应该是这样的:

      $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 query 始终返回DOMNodeList。如果查询没有找到任何节点,它将为空。


      如果ID是真实的XML ID,也可以使用XPath中的id()函数

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

      有关 XML ID 的更多详细信息,请参阅 Simplify PHP DOM XML parsing - how?

      【讨论】:

        【解决方案3】:

        对于 SimpleXML,这应该可以解决问题:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-28
          相关资源
          最近更新 更多