【问题标题】:Trying to get property of non-object php DOM试图获取非对象 php DOM 的属性
【发布时间】:2013-12-24 14:06:25
【问题描述】:

我是 DOM 的新手,我正在开发一个网站,当人们点击比如说福特时,链接将引用 cars.php?model=ford 并显示所有福特车主。我把php是这样的:

<?php 
//retrieve xml constants
include("includes/constants.php");  



//create instance of xml doc
$ldoc = new DOMDocument();
//load login fild into  $ldoc
$ldoc -> load($LoginFile);
$xpath = new DOMXPath($ldoc);


$model = $_GET["model"];
    $query = "//loginData/member/model[. = '".$model."']";
    $queryResult = $xpath->query($query);
    $queryNode = $queryResult->item(0)->parentNode;
foreach($queryNode as $parent)
{

    $login = $parent->getElementsByTagName("login");
    $loginValue = $login->item(0)->nodeValue;
    echo ($loginValue);

}
?>

我希望它搜索所有值为 FORD 的节点,然后引用它的 parentNode 并在登录节点中显示登录

【问题讨论】:

    标签: javascript php xml dom


    【解决方案1】:

    首先使用 DOMXpath::evaluate() 而不是 DOMXpath::query()。使用 evaluate() 你可以使用所有类型的 Xpath 表达式,使用 query() 只有一次返回节点列表。

    说到节点列表。您的表达式返回一个节点列表,$queryNode = $queryResult-&gt;item(0)-&gt;parentNode; 您尝试读取返回的节点列表中第一个节点的父节点。看来你的节点列表是空的,所以失败了。

    使用 xpath,您可以直接获取所有型号的福特车主。

    $members = $this->evaluate("//loginData/member[model='FORD']");
    

    这将返回所有具有子节点“model”的成员元素,其文本内容为“FORD”。在您的描述中,您使用大写的“FORD”,在 URL 中使用小写的“ford”。是哪一个?

    使用 evaluate()/query() 的第二个参数,您可以为 Xpath 表达式提供上下文节点。将其与 evaluate() 一起使用可以直接从 XML 节点获取字符串值。

    foreach ($members as $member) {
      var_dump(
        $xpath->evaluate('string(//model)', $member)
      );
    }
    

    【讨论】:

    • 这对我有用。不过,我想指出节点似乎不是空的,而且我仍然收到 PHP 通知:尝试获取非对象的属性。再次,评估的使用效果很好。谢谢
    猜你喜欢
    • 2011-08-25
    • 2017-08-21
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多