2012-05-18 75 views
0

我在尋找過濾這個XML enter link description here 的最佳方式來過濾XML是: -to運行所有的XML和影響變量 -after我們這個重寫這個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>但在<hour>有2個應答器<t>,因此我值的<t> 2代替第一兒童<hour>

+0

是我錯了,或者你應該去$ LOC = $ flux->的getElementsByTagName( '小時'),然後檢查第一孩子在裏面嗎?您可以使用XPath查詢「hour」元素的第一個「T」子元素。另外,這個文檔裏有幾個小時的元素,所以我不確定你想輸出什麼。對於每個小時,「T」條件?或者是什麼? –

+0

我想輸出每個小時的T :) – ranell

+0

如何在這種情況下使用Xpath?謝謝 – ranell

回答

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"; 
     } 
     } 
    } 
} 

我想你應該知道在哪裏可以從這個角度去:)

更高級的版本將針對所有小時元素(「* /小時」)發出XPath查詢,然後在每個小時元素的foreach中發出另一個xpath查詢($xpath->query("*/t[1]", $hourElement);)。這樣你也可以訪問小時對象,例如可以顯示這個小時。的foreach

UPDATE

簡單的版本:

if (!is_null($elements)) { 
    foreach ($elements as $element) 
    { 
     echo "<br/>".$element->nodeValue; 
    } 
} 
+0

waw,很好!它適用於我,並且我學到了一種新的「專業」方法:)非常感謝Tomasz :) – ranell

+0

沒問題。值得一提的是,simpleXML PHP擴展也內置了XPath查詢並且比DOM更快(就我所知)。見http://www.php.net/manual/en/simplexmlelement.xpath.php –