1

正如我在问题标题中提到的那样,我正在尝试下面的代码以达到 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
                                        )

                                )

                        )

                )

        )

)

现在如何直接到达 [内容] => 卢比。10300. 我试过了:

echo $source[0]['div']['meta']['@attributes']['content']

但它不起作用。

4

2 回答 2

1

试试echo (String) $source[0]->div->meta[0]['content'];

基本上,当你看到一个元素是一个对象时,你不能像数组一样访问它,你需要使用对象->方法。

于 2012-12-12T15:21:32.197 回答
0

print_raSimpleXMLElement不显示真实的对象结构。所以你需要有一些知识:

$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 表达式直接访问该节点(如果这是单一情况)。

SimpleXMLElementBasic SimpleXML 使用示例文档中了解有关如何访问的更多信息。

于 2012-12-12T15:40:10.723 回答