这很可能是因为他们在xmlns="http://iptc.org/std/NewsML/2003-10-10/"
文档中引入了一个默认的命名空间().简而言之,SimpleXML对默认命名空间的支持并不是很好.
您可以尝试显式注册名称空间前缀:
$xml->registerXPathNamespace("n", "http://iptc.org/std/NewsML/2003-10-10/"); $xml->xpath('/n:NewsML');
您必须调整XPath表达式以"n:"
在每个元素上使用前缀.以下是一些其他信息:http://people.ischool.berkeley.edu/~felix/xml/php-and-xmlns.html.
编辑:根据规范:
该
registerXPathNamespace()
函数为下一个XPath查询创建前缀/ ns上下文.
这意味着必须在每个XPath查询之前调用它,因此包装XPath查询的函数将是自然而然的事情:
function simplexml_xpath_ns($element, $xpath, $xmlns)
{
foreach ($xmlns as $prefix_uri)
{
list($prefix, $uri) = explode("=", $prefix_uri, 2);
$element->registerXPathNamespace($prefix, $uri);
}
return $element->xpath($xpath);
}
用法:
$xmlns = ["n=http://iptc.org/std/NewsML/2003-10-10/"];
$result = simplexml_xpath_ns($xml, '/n:NewsML', $xmlns);