2012-12-20 32 views
2

假設我有這樣的HTML從源(再殺吧):DOMXPath查詢的動態HTML

<tr class="calendar_row" data-eventid="41675"> 
    <td class="alt2 eventDate smallfont" align="center"/> 
    <td class="alt2 smallfont" align="center">9:00pm</td> 
    <td class="alt2 smallfont" align="center">AUD</td> 
    <td class="alt2 icon smallfont" align="center"> 
     <div class="cal_imp_medium" title="Medium Impact Expected"/> 
    </td> 
    <td class="alt2 eventHigh smallfont" align="center"> 
     <div class="calendar_detail level_1" data-level="1" title="Open Detail"/> 
    </td> 

    //I want to get this part below correctly 

    <td class="alt2 pad_left eventHigh smallfont" align="center">0.2%</td> 
    <td class="alt2 pad_left eventHigh smallfont" align="center"/> 
    <td class="alt2 pad_left eventHigh smallfont" align="center"> 
     <span class="revised worse" title="Revised From -0.3%">-0.4%</span> 
    </td> 
</tr>​ 

而且我想要得到的值(nodeValues)運輸署通過的XPath:

$query = $xpath->query('//tr[@data-eventid="41675"]/td[@class="alt2 pad_left eventHigh smallfont"]'); 

我不能弄清楚爲什麼我只能得到值-0.4%。 儘管html看起來很複雜並且沒有被格式化,但是有沒有什麼可能的方式(查詢)來檢索標籤之間的值,包括第二個td上的空值?

全碼

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$xpath = new DOMXPath($doc); 

$query_results = $xpath->query('//tr[@data-eventid="'.$data_eventid.'"]/td[@class="alt2 pad_left eventHigh smallfont"]'); 
foreach($query_results as $values){ 
    if($values->nodeValue!=' ' and $values->nodeValue!='' and $values->nodeName!='#text') { //Discards Empty Arrays 
     $table_values[$data_eventid][5] = $values->nodeValue; 
    } 
} 
+0

等一下,你會得到* span *?你用什麼來創建該查詢?你在使用simplexml還是其他內置解析器? – Charles

+0

我正在使用xpath query..and yes.i不知道爲什麼它會得到span的值。 – Vainglory07

+0

通過[其中一個**十三個不同的XML擴展**](http://php.net/refs。 XML)? DOM? XMLParser的? SimpleXML的?向我們顯示您用來定義'$ xpath'的代碼。 – Charles

回答

1

試試這個://tr[@data-eventid="41675"]/td[@class="alt2 pad_left eventHigh smallfont"]/descendant-or-self::*/text()

那麼你可能只是想的節點,所以取/text()關:

//tr[@data-eventid="41675"]/td[@class="alt2 pad_left eventHigh smallfont"]/descendant-or-self::* 
1

你的XPath與3個td元素時,首先包含0.2%,然後是空的,最後一個包含<span class="revised worse" title="Revised From -0.3%">-0.4%</span>

您指定的順序,這些節點的值(跳過空的),以相同的變量table_values[$data_eventid][5] - 即這樣將包含最後一個(非空)節點的值 - 即-0.4%

如果你想所有節點的值應該附加到列表中,或者將它們放置在數組的不同元素中。