Продолжая путь DOMDocument::getElementsByTagNameNS
, как предлагали другие, вот рабочий код (включая чтение внутреннего содержимого), предполагая, что у вас также есть часть объявления пространства имен (например, <abc:response xmlns:abc="http://api-url">
), как указано @Sjoerd -
$xml = '<?xml version="1.0"?>
<abc:response xmlns:abc="http://api-url">
<mynotes>
<note>
<tasks>Task 1</tasks>
<details>Detail 1</details>
</note>
<abc:xyz> Can Read the XML data between this tag!!</abc:xyz>
</mynotes>
</abc:response>';
$dom = new DOMDocument;
// load the XML string defined above
$dom->loadXML($xml);
foreach ($dom->getElementsByTagNameNS('http://api-url', '*') as $element)
{
//echo 'see - local name: ', $element->localName, ', prefix: ', $element->prefix, "\n";
if($element->localName == "xyz")
echo get_inner_html($element);
}
function get_inner_html( $node )
{
$innerHTML= '';
$children = $node->childNodes;
foreach ($children as $child)
{
$innerHTML .= $child->ownerDocument->saveXML( $child );
}
return $innerHTML;
}
Здесь - рабочая ссылка, показывающая вывод.
Обратите внимание, что я только что обернул ваш xml в это -
'<?xml version="1.0"?>
<abc:response xmlns:abc="http://api-url">'
.$yourxml
.'</abc:response>';
Я использовал решение, которое я получил здесь PHP DOM получить значение узла html?(без удаления меток) ... в эти дни застрял с подобной проблемой.