1

我有一个查找 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) {
}

所以没有找到“味精”标签。为什么?

4

1 回答 1

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;

但这只是附带说明;-)

于 2013-04-23T10:13:59.603 回答