使用PHP代码在XML中搜索

时间:2015-07-24 14:17:53

标签: php xml xpath

这是我的代码,我正在尝试使用Xpath显示xml的值,但是当我运行此代码时,我的代码中出现错误。

这是代码

<?php
$load = new DOMDocument();
$load = simplexml_load_file("testing.xml");
var_dump($load);
$xpath = new DOMXpath($load);
var_dump($xpath);
$path1 = "/clip/metadata[name=keywords]/value";
$query = $xpath->query($path1);
var_dump("$query"); 
?>

这是错误,我正在

Catchable fatal error: Argument 1 passed to DOMXPath::__construct() must be an instance of DOMDocument, instance of SimpleXMLElement given in C:\xampp\htdocs\xml-text\index.php on line 5

2 个答案:

答案 0 :(得分:2)

如错误所述,您没有向构造函数传递适当的参数。 simplexml_load_file会返回SimpleXmlElement个对象,而不是DOMDocument个对象。

答案 1 :(得分:1)

如错误中所述,您传递的是SimpleXmlElement对象,而不是DOMDocument个对象。

我之前的回答是不正确的。它显示了如何将SimpleXmlElement转换为DOMElement而不是DOMDocument

http://php.net/manual/en/domdocument.load.php是如何将xml文件正确加载到DOMDocument对象中。

$load = new DOMDocument();
$load->load("testing.xml");
$xpath = new DOMXpath($load);

具体来说,为了获得名称为“关键字”的节点的值,您可以执行类似这样的操作

$load = new DOMDocument();
$load->preserveWhiteSpace = false;
$load->load(__DIR__ . "/testing.xml");
$xpath = new DOMXpath($load);
$path1 = '//clip/metadata/name[ . = "Keywords"]';
$query = $xpath->query($path1);
foreach($query as $entry) {
    $value = $entry->parentNode->childNodes->item(1)->nodeValue;
}