2009-07-29 61 views
0

我想解析一個格式良好的xhtml文檔。
我在節點迭代期間遇到問題。
我XHTML有一個像Java和xpath - xHtml解析問題

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
    <head>...</head> 
    <body> 
    ... 
    <form> 
    ... 
     <div class="AB"> (1 or 2 times) 
     ...      
     <div class="CD"> 
     ... 
      <table>   
      <tbody> 
       <tr> (1 to N times) 
        <td> XXX </td> 
         <td> YYY </td> ... 

我需要的信息都包含在列(TD)的結構。
我想構造N個對象。所以每行(tr)都在其列中包含構建對象所需的信息。
我有1或2格的class =「AB」。所以基本上我將有1個或2個對象包含首先在表

所以從每一行創建的其他對象的列表AB我提取這些AB的NodeList的div

NodeList ABlist= (NodeList) xpath.evaluate("//div[@class='AB']", document, XPathConstants.NODESET) 

現在我正在努力得到第一個div AB的所有tr elems的NodeList。

NodeList trList = (NodeList) xpath.evaluate("/div/table//tr", ABlist.item(0), XPathConstants.NODESET); 

在這種情況下,trList是空的。你知道我的代碼有什麼問題嗎?
謝謝

回答

2

在你的第二個失敗的XPath的問題是,你有/啓動:

/div/table//tr 

在XPath,就像在文件路徑,開始的一條路徑與/指的根「啓動文件」。但是你實際上並不想那麼做 - 你想從節點開始。所以:

div/table//tr 

會做你想做的。

+0

你是對的Pavel!我認爲(作爲第二個參數)我將'上下文'傳遞給evaluate()方法。我想我沒有/之前在這裏發帖嘗試過,但也許我在此期間也改變了一些其他的東西,那在當時並不奏效。無論如何它現在工作。非常感謝你的幫助! – mickthompson 2009-07-29 22:27:33

0

您確定這是XHTML版嗎?樣本文檔中沒有聲明名稱空間,沒有該名稱空間,它不是XHTML。如果有一個命名空間,並且爲了簡潔起見,你錯過了這個例子,那麼你的XPath表達式也需要引用這個命名空間,否則它們將不會選擇任何東西。

+0

嗨skaffman,我正確retreiving div列表。這只是我嘗試提取不工作的trList的方式。 其實你是對的,文檔沒有指定任何命名空間,所以也許它只能被稱爲xml。它只符合xml規範而不指定任何名稱空間。 – mickthompson 2009-07-29 22:12:36