0

我正在尝试使用 xpath 来运行程序并解析出 xml 数据以重新定价书籍。但是,当我运行程序时,出现以下错误:

PHP Warning:  SimpleXMLElement::xpath() [<a href='simplexmlelement.xpath'>simplexmlelement.xpath</a>]: Invalid expression

PHP Warning:  SimpleXMLElement::xpath() [<a href='simplexmlelement.xpath'>simplexmlelement.xpath</a>]: xmlXPathEval: evaluation failed

都在第 242 行,这是 $result 的行...:

//function to check if child nodes exist for pricing
function xml_child_exists($xml, $childpath)
 {
$result = $xml->xpath($childpath);
 if (isset($result)) {
    return true;
} else {
    return false;
}

}

这个函数在这里运行:

// check to see if there are values
        if(xml_child_exists($parsed_xml, $current->AttributeSets->children('ns2', true)->ItemAttributes->ListPrice->Amount))
           { 
            $listPrice = $current->AttributeSets->children('ns2', true)->ItemAttributes->ListPrice->Amount;
          } else {
            $listPrice = 0;
          }

然后我终于结束了:

PHP Fatal error:  Call to a member function children() on a non-object in repricemws.php on line 67

第 67 行是调用函数的位置。

这段代码有什么问题,我该如何让它正确运行?

4

1 回答 1

1

是否$current->AttributeSets->children('ns2', true)->ItemAttributes->ListPrice->Amount包含有效的 XPath 表达式?

从该调用链的外观来看,您正在提取一个值,例如 '5.00' 并将其直接传递给 xpath 查询执行器。那是行不通的,并且会产生错误消息。


跟进:

好的,Amount价格也是如此,所以大概是 5.00 美元或 5.00 美元,对吧?这意味着您使用该确切的字符串作为您的 xpath 查询,基本上是在执行以下操作:

$result = $xml->xpath('$5.00');

不是一个有效的 xpath 表达式。所以 $result 不是文档中匹配节点的列表,它实际上是一个布尔值 FALSE。

然后,您对该值执行 isset() 。变量IS设置(设置为布尔值 false),因此您的函数返回TRUE

于 2012-07-19T16:12:28.883 回答