1

次の SimpleXMLElement オブジェクトがありますhttp://pastebin.com/qEP0UUPJ

xpath を使用してクエリを実行できます$xaugbp = $xml->xpath("/query/results/rate");が、これは検索を絞り込むだけです。

http://pastebin.com/Xwezx4bZ

次のオブジェクトにアクセスしたい:

[0] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [id] => XAUGBP
            )

        [Name] => XAU to GBP
        [Rate] => 1030.5784
        [Date] => 7/27/2012
        [Time] => 5:55pm
        [Ask] => 1027.5662
        [Bid] => 1033.5896

を使用してその特定のオブジェクトを取得できます

$ob = $xmlObject->xpath("//query/results/rate[contains(@id, 'XAUGBP')]");

を使用して「Ask」を取得できます

$ob = $xmlObject->xpath("//query/results/rate[contains(@id, 'XAUGBP')]/Ask");

しかし、どうすればそのオブジェクトを変数に変換できますか? たとえば、計算を行うことができますか?

これを行う唯一の方法はxpathですか?より良い/より効率的/より迅速な方法はありますか? 簡単にアクセスできるように、これを連想配列に変換することは可能ですか?

4

2 に答える 2

2

序文

何かをする前に、SimpleXML の独特なやり方に (再) 慣れてください。開始するのに最適な場所は、SimpleXML の基本的な使い方のマニュアル ページです。


以下の例は、次のことを示しています。

  • <rate>属性の値に基づいて単一の要素オブジェクトを取得し、それを表示する方法。
  • <rate>すべての要素をループし、それらの値を表示します。

基本的なコード例

$query = simplexml_load_file('…');

// Get a <rate> element by its id attribute
$rates = $query->xpath('results/rate[@id = "XAUGBP"]');
$rate  = $rates[0];
echo "$rate->Name was at $rate->Rate at $rate->Time on $rate->Date\n";

echo "-----\n";

// or, loop over all of the <rate> elements
foreach ($query->results->rate as $rate) {
    echo "$rate->Name was at $rate->Rate at $rate->Time on $rate->Date\n";
}

上記の例の出力:

XAU to GBP was at 1030.5784 at 5:55pm on 7/27/2012
-----
XAU to GBP was at 1030.5784 at 5:55pm on 7/27/2012
XAG to GBPZ 999 N was at 17.4502 at 5:55pm on 7/27/2012
XPT to GBPZ 999 was at 893.3414 at 5:55pm on 7/27/2012
XPD to GBP1 UZ was at 362.652 at 5:55pm on 7/27/2012

(オンラインで実行されているこの例を参照してください)


XML から配列へ

これが何度も何度も尋ねられているのを見ます。オブジェクトのツリーをSimpleXMLElement「使いやすい」配列に変換するのではなく、SimpleXML の使用方法を学ぶことに時間をかけてください。これが完了したら、オブジェクトを配列に変換して操作する中間ステップを実行する必要はありません。 . 上記の「基本的な使い方」のページで理解できるはずですが、知っておくべき重要な点は次のとおりです。

  1. 子ノードはプロパティ構文を使用します。$parent->child
  2. 属性は配列スタイルの構文を使用します:$element["attr_name"]
  3. 必要に応じて、オブジェクトをフレンドリな型にキャストします。(string) $element->child
于 2012-07-29T17:17:33.497 に答える
1

XPath クエリは"//query/results/rate[contains(@id, 'XAUGBP')]"

于 2012-07-29T16:33:21.400 に答える