2

ですから、私はphpを使ったxmlの読み取りの経験がありません。私はいくつかの調査を行っており、いくつかのチュートリアルを読んでいますが、確認したいことが1つあります。これで、次のxmlコード(file.xml)ができました。

  <location code="TB0023">
    <temp unit="F">15.8</temp>
    <US>Intermittent clouds</US>
  </location>

  <location code="YG0023">
    <temp unit="F">23</temp>
    <US>Mostly Clear</US>
  </location>

したがって、たとえばロケーションcode="TB0023"のtempにアクセスする方法は次のとおりです。

$open = simplexml_load_file('file.xml');
echo $open ->location[0]->temp;

今、私は次のようなことをすることによってそれをもう少し読みやすくしようとして失敗しました(どういうわけか連想配列のような):

$open = simplexml_load_file('file.xml');
echo $open ->location[code="TB0023"]->temp;

したがって、インデックス0 1 2 3 ..を使用せずに、その識別子TB0023を使用してその特定の場所からデータを取得する方法はありますか。

ありがとうございました。

4

2 に答える 2

1

SimpleXMLフレームワークには、SimpleXMLElementクラスが含まれています。

ここで説明するXpath式でSimpleXMLElementの path()メソッドを使用してください。

php.netサイトからのこのコード

$string = <<<XML
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , $node) = each($result)) {
    echo '/a/b/c: ',$node,"\n";
}

/* Relative paths also work... */
$result = $xml->xpath('b/c');

while(list( , $node) = each($result)) {
    echo 'b/c: ',$node,"\n";
}

これを印刷します:

/a/b/c: text
/a/b/c: stuff
b/c: text
b/c: stuff

XPathは、XML内の要素を見つけるための標準的な手法です。

あなたの場合、次のようなxp​​athクエリを使用します。

/location[@code="TB0023"]/temp
于 2012-12-20T23:09:25.203 に答える
1

xpathを使用してXMLの値を照会したいとします。

$result = $open->xpath("//location[@code='TB0023']")

詳細については、PHPドキュメントのXPathを参照してください。

于 2012-12-20T23:11:32.793 に答える