0

このxmlのフィルタリングを探していますここにリンクの説明を入力してくださいxmlをフィルタリング する最良の方法は次のとおりです:-すべてのxmlを実行し、変数の値に影響を与える-その後、このxmlをこの変数で書き直します

他に方法はありますか?この方法では、次のようなdomを使用しました。

    $flux= new DOMDocument();
if ($flux->load('http://xml.weather.com/weather/local/FRXX0076?unit=m&hbhf=6&ut=C'))  
{$loc=$flux->getElementsByTagName('t');
  foreach($loc as $lo)
    echo $lo->firstChild->nodeValue . "<br />";
}

このコードでは、表示しようとしまし<t>たが、2つのbaliseが含ま<t>れているため、代わりにの最初の子の<hour>値が2つあります。<t><hour>

4

1 に答える 1

1

簡単な答え:

$flux= new DOMDocument();
if ($flux->load('http://xml.weather.com/weather/local/FRXX0076?unit=m&hbhf=6&ut=C'))  
{
    $xpath = new DomXPath($flux);

    $elements = $xpath->query("*/hour/t[1]");

    if (!is_null($elements)) {
      foreach ($elements as $element)
      {
        echo "<br/>[". $element->nodeName. "]";

        $nodes = $element->childNodes;
        foreach ($nodes as $node)
        {
          echo $node->nodeValue. "\n";
        }
      }
    }
}

この時点からどこに行くべきかを知っておくべきだと思います:)

より高度なバージョンでは、すべての時間要素( "* / hour")に対してXPathクエリを発行し、次にforeachで各時間要素に対してこの要素コンテキスト($xpath->query("*/t[1]", $hourElement);)で別のxpathクエリを発行します。このようにして、時間オブジェクトにもアクセスでき、たとえばこの時間を表示できます。

アップデート

foreachのより単純なバージョン:

if (!is_null($elements)) {
    foreach ($elements as $element)
    {
        echo "<br/>".$element->nodeValue;
    }
}
于 2012-05-19T00:29:42.897 に答える