Используя мой код ниже, я могу легко прочитать <abcxyz>
xml. но как я могу прочитать данные между тегами <abc:xyz>
</abc:xml>
xml .. xml с помощью php.pls help ….
мой пример кода php …
$objDOM->load("abc.xml"); $note = $objDOM->getElementsByTagName("note"); foreach( $note as $value ) { $tasks = $value->getElementsByTagName("tasks"); $task = $tasks->item(0)->nodeValue; $details = $value->getElementsByTagName("details"); $detail = $details->item(0)->nodeValue; echo "$task :: $detail<br>"; }
Мой пример кода XML:
<mynotes> <note> <tasks>Task 1</tasks> <details>Detail 1</details> </note> <abc:xyz> Cannot Read the XML data between this tag</abc:xyz> </mynotes>
Pls направляет меня …
благодаря
Riad
abc:xyz
означает, что элемент имеет имя xyz
, а пространство имен обозначено abc
. Часть пространства имен фактически является сокращением для URI, который обычно также указывается в файле XML. Например, вы можете увидеть это:
xmlns:abc="http://www.abc.com/xml"
В этом случае элементы, которые имеют abc
перед двоеточием, находятся в пространстве имен http://www.abc.com/xml
.
Чтобы получить этот элемент, вам нужно использовать getElementsByTagNameNS и передать http://www.abc.com/xml
как пространство имен.
вам нужен DOMDocument :: getElementsByTagNameNS
Как и другие методы, предлагаемый 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 get nodevalue html? (без снятия тегов) … в эти дни была похожа проблема.