Как читать теги <abc: xyz> с помощью php - PullRequest
2 голосов
/ 28 июня 2010

Используя мой код ниже, я могу легко прочитать тег <abcxyz> xml.но как я могу прочитать данные между <abc:xyz> </abc:xml> xml tag .. xml tag используя 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>

Просьба направить меня ...

СпасибоRiad

Ответы [ 3 ]

7 голосов
/ 28 июня 2010

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 в качестве пространства имен.

2 голосов
/ 28 июня 2010
1 голос
/ 14 июля 2011

Продолжая путь 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?(без удаления меток) ... в эти дни застрял с подобной проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...