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);
?>

これがソースコードです。私はeコマースから価格をスクラップするために使用しています。それは動作し、以下の出力を与えます:

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
                                        )

                                )

                        )

                )

        )

)

今まで直接到達する方法 [コンテンツ] => Rs. 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_rは、実際のオブジェクト構造SimpleXMLElementを示していません。したがって、次の知識が必要です。

$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 式を使用してそのノードに直接アクセスすることはできます (それが 1 つのケースである場合)。

にアクセスする方法についてSimpleXMLElementは、基本的な SimpleXML の使用例ドキュメントを参照してください。

于 2012-12-12T15:40:10.723 に答える