正如我在问题标题中所提到的,我正在尝试使用下面的代码来到达xpath结果中的所需节点。
<?php
$xpath = '//*[@id="topsection"]/div[3]/div[2]/div[1]/div/div[1]';
$html = new DOMDocument();
@$html->loadHTMLFile('http://www.flipkart.com/samsung-galaxy-ace-s5830/p/itmdfndpgz4nbuft');
$xml = simplexml_import_dom($html);
if (!$xml) {
echo 'Error while parsing the document';
exit;
}
$source = $xml->xpath($xpath);
echo "<pre>";
print_r($source);
?>
这是源代码。我用来取消电子商务的价格。 它起作用,它给出了以下输出:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line
)
[div] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => prices
[itemprop] => offers
[itemscope] =>
[itemtype] => http://schema.org/Offer
)
[span] => Rs. 10300
[div] => (Prices inclusive of taxes)
[meta] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[itemprop] => price
[content] => Rs. 10300
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[itemprop] => priceCurrency
[content] => INR
)
)
)
)
)
)
现在如何直达[content] =&gt;卢比。 10300。 我试过了:
echo $source[0]['div']['meta']['@attributes']['content']
但它不起作用。
答案 0 :(得分:1)
尝试echo (String) $source[0]->div->meta[0]['content'];
。
基本上,当你看到一个元素是一个对象时,你不能像数组一样访问它,你需要使用对象->
方法。
答案 1 :(得分:0)
SimpleXMLElement
的print_r
未显示真实的对象结构。所以你需要掌握一些知识:
$source[0]->div->meta['content']
| | | `- attribute acccess
| | `- element access, defaults to the first one
| `- element access, defaults to the first one
|
standard array access to get
the first SimpleXMLElement of xpath()
operation
那个示例就是(带有你的地址)以下内容(print_r
再次,Demo):
SimpleXMLElement Object
(
[0] => Rs. 10300
)
如果您需要文本值,请将其投射到字符串:
$rs = (string) $source[0]->div->meta['content'];
但是,您已经可以使用xpath表达式直接访问该节点(如果是单个案例)。
详细了解如何访问Basic SimpleXML usage ExamplesDocs中的SimpleXMLElement
。