Ответ 1
Скорее всего, это связано с тем, что они внедрили пространство имен по умолчанию (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.
EDIT: согласно спецификация:
Функция
registerXPathNamespace()
создает префикс/ns-контекст для следующего запроса XPath.
Это означает, что его нужно было бы вызывать перед каждым запросом 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);