【问题标题】:Dom Xpath issueDom Xpath 问题
【发布时间】:2011-06-21 16:59:18
【问题描述】:

我不明白为什么我无法使用 XPath。怎么了?

<?php
$dom_object = new DOMDocument();
$domxpath_object = new DOMXpath($dom_object);

$dom_object->loadXML('<?xml version="1.0" encoding="UTF-8" ?><databases><foo>bar</foo></databases>');
$domnodelist_object = $domxpath_object->query('/');
echo '<pre>' . print_r($domnodelist_object->item(0)->hasChildNodes(), true) . '</pre>'; // output: nothing

print_r($dom_object->childNodes->item(0)->nodeValue); // output bar
?>

谢谢。

【问题讨论】:

  • 不记得 xpath 是否更新,您是否尝试将 new DOMXPath() 放在 -&gt;loadXML() 之后?
  • 谢谢。你是对的!
  • @Orbling - 你能发表你的建议作为答案吗?
  • @Grzegorz Oledzki:根据要求,现在给出答案。因为之前的评论不是针对我的,所以我没有注意到它已成为公认的答案。感谢您的通知。

标签: php html xml dom xpath


【解决方案1】:

[评论转换为答案,方便那些在此搜索的人。]

DOMXpath 似乎在创建时建立了它的状态,而不是链接到创建它的 DOMDocument。对DOMDocument 的更新,在这种情况下,-&gt;loadXML() 调用不会跟随DOMXpath 对象。

因此有必要在实例化 XPath 对象之前加载 XML,创建完整的 DOM 树。

<?php
$dom_object = new DOMDocument();    
$dom_object->loadXML('<?xml version="1.0" encoding="UTF-8" ?><databases><foo>bar</foo></databases>');

// XPath created from DOMDocument, after loading
$domxpath_object = new DOMXpath($dom_object);

$domnodelist_object = $domxpath_object->query('/');

// ... additional processing

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2013-10-15
    • 2011-02-21
    • 2011-08-13
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多