【问题标题】:PHP: getting value of XML element by attribute [duplicate]PHP:通过属性获取XML元素的值[重复]
【发布时间】:2014-12-01 01:07:06
【问题描述】:

我正在使用 file_get_contents 函数获取一个 xml,然后用它创建一个 SimpleXMLElement。

xml文件可以看这里:http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=Nirvana&api_key=0ca5b0824b7973303c361510e7dbfced

问题是我需要获取 lfm->artist->image[@size='small'] 的值,却找不到怎么做。

【问题讨论】:

标签: php xml


【解决方案1】:

您应该为此使用 DOMXPath:http://php.net/manual/en/class.domxpath.php

此 XPath 查询适用于您的 XML:

\\lfm\artist\image[@size='small']

如下:

$doc = new DOMDocument();
$doc->loadXML($url);

$xpath = new DOMXpath($doc);

$elements = $xpath->query("\\lfm\artist\image[@size='small']");


if (!is_null($elements)) {
  foreach ($elements as $element) {
    echo "<br/>[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }
  }
}

【讨论】:

  • XPath 也可通过使用 xpath() 函数从 SimpleXMLElement 对象获得。请参阅:php.net/manual/en/simplexmlelement.xpath.php,是的,这种方式看起来最简单。
  • 我做错了什么? $requestXML = file_get_contents('ws.audioscrobbler.com/2.0/…); $doc = 新的 DOMDocument(); $doc->loadXML($requestXML); $xpath = 新 DOMXpath($doc); echo $xpath->query("\\lfm\artist\image[@size='small']");
  • 完全消除 file_get_contents 和 loadXML 行。而是使用 loadHTMLFile() 并传入 XML url。见已编辑。
  • 它显示 $doc->loadHTMLFile($url); 行中每个 xml 元素的无效标记警告;
  • 查看已编辑,如果您加载 XML 文档,您应该使用 loadXML 而不是 loadHTML。
猜你喜欢
  • 2018-09-26
  • 2012-01-13
  • 1970-01-01
  • 2012-08-13
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多