我有一个查找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”标签。为什么呢?
答案 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;
但这只是旁注; - )