找不到domDocument标记

时间:2013-04-23 09:54:05

标签: php domdocument

我有一个查找XML标记的函数:

 function extraerTagXML($mensaje, $tagname){


          $dom = new domDocument('1.0', 'UTF-8');
          //
          // load the html into the object ***/
          $dom->loadHTML($mensaje);

          //discard white space
          $dom->preserveWhiteSpace = false;
          $nodeList= $dom->getElementsByTagName("'".$tagname."'"); // here u use your desired tag

          $items = array();
          for($i=0; $i < $nodeList->length; $i++) {
                    $node = $nodeList->item($i);
                    $items[] = trim($node->nodeValue);
          }
          var_dump($items);
         // libxml_clear_errors();

          return $items;

 }

执行时:

    echo $salida;

    $resultado = extraerTagXML($salida,"MSG");

我得到了:

<?xml version='1.0' encoding='UTF-8' ?>
<cod_avis>3000082</cod_avis>
<MSG>ok</MSG> 
</Status>

array(0) {
}

因此找不到“MSG”标签。为什么呢?

1 个答案:

答案 0 :(得分:2)

首先,您正在加载XML文档而不是HTML文档。因此,请使用loadXML()代替loadHTML()方法 其次,在调用getElementsByTagName()时,您无需在标记名周围显式添加引号,而不是

getElementsByTagName("'".$tagname."'");

使用

getElementsByTagName($tagname);

正如我在上面的评论中提到的,你的XML文档形式不好 - 它缺少一个根节点,编辑它看起来像

<?xml version='1.0' encoding='UTF-8' ?>
<Status>
<cod_avis>3000082</cod_avis>
<MSG>ok</MSG> 
</Status>

第三,您也可以将DOMXPath用于同一目的,因为您使用的是DOMDocument,即

$xPath = new DOMXPath($dom);
$result = $xPath->query('//MSG');
echo $result->item(0)->nodeValue;

但这只是旁注; - )