<?xml version="1.0" encoding="UTF-8"?>
<AddProduct>
<auth><id>vendor123</id><auth_code>abc123</auth_code></auth>
</AddProduct>
我做错了什么:致命错误:调用未定义的方法DOMNodeList :: getElementsByTagName()
$xml = $_GET['xmlRequest'];
$dom = new DOMDocument();
@$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$auth = $xpath->query('*/auth');
$id = $auth->getElementsByTagName('id')->item(0)->nodeValue;
$code = $auth->getElementsByTagName('auth_code')->item(0)->nodeValue;
答案 0 :(得分:1)
您可以仅使用XPath检索所需的数据(在您发布的XML中):
$id = $xpath->query('//auth/id')->item(0)->nodeValue;
$code = $xpath->query('//auth/auth_code')->item(0)->nodeValue;
你也在getElementsByTagName()
($auth
)上调用DOMXPath
,正如@Ohgodwhy在评论中指出的那样,这导致了错误。如果您想使用它,则应在$dom
上调用它。
您的XPath表达式返回当前(上下文)节点的auth
子节点。除非您的XML文件不同,否则使用以下方法之一会更清楚:
/*/auth # returns auth nodes two levels below root
/AddProduct/auth # returns auth nodes in below /AddProduct
//auth # returns all auth nodes
答案 1 :(得分:1)
这是我在审核php文档后提出的问题(http://us1.php.net/manual/en/class.domdocument.php,http://us1.php.net/manual/en/domdocument.loadxml.php,http://us3.php.net/manual/en/domxpath.query.php,http://us3.php.net/domxpath)
$dom = new DOMDocument();
$dom->loadXML($xml);
$id = $dom->getElementsByTagName("id")->item(0)->nodeValue;
$code = $dom->getElementsByTagName("auth_code")->item(0)->nodeValue;
正如helderdarocha和Ohgodwhy指出的那样,getElementByTagName是DOMDocument方法而不是DOMXPath方法。我喜欢helderdarocha只使用XPath的解决方案,我发布的解决方案实现了同样的功能,但只使用了DOMDocument。