2010-07-08 97 views
1

編輯:這是爲什麼這個投票下來?我真的不知道...順便說一句../不起作用,因爲我不想要表的父母,但實際上想../td+1我不知道這是甚至可能嗎?[xpath]需要幫助獲取另一個表格行的xpath

嗨,大家好。

我手邊有一個相當複雜的問題..

我有這樣的一個表:

名稱|結果|自動測試|自動測試結果| AutotestName

X |通過| X86HZS1 | | |

所以...我想要做的是以下幾點。我只知道身份證。我想從自動測試中更新AutotestResult。首先是空的。

我試圖找到ID ...我有。但是當我有ID時,我必須更新它旁邊的行。我怎麼做?我試着玩xPath。使用../../../td etcetc後退,但沒有運氣。

我似乎無法找到它的鄰居表...

可能有人請點我到正確的方向?

非常感謝您的幫助!

漢尼拔

回答

1

除了jassofollowing-sibling軸的良好建議,這個答案還有一些問題:您必須修復td是什麼AutotestID。

所以,知道表」的架構:

<table> 
    <tr> 
    <td>Name</td> 
    <td>Result</td> 
    <td>AutotestID</td> 
    <td>AutotestResult</td> 
    <td>AutotestName</td> 
    </tr> 
    <tr> 
    <td>X</td> 
    <td>Pass</td> 
    <td>X86HZS1</td> 
    <td></td> 
    <td></td> 
    </tr> 
</table> 

你可以使用:

/table/tr/td[3][.='X86HZS1']/following-sibling::td[1] 

如果你不知道AutotestID位置,你可以用途:

/table/tr/td[count(../../tr/td[.='AutotestID']/preceding-sibling::td)+1] 
      [.='X86HZS1']/following-sibling::td[1] 
1

你的問題還不清楚,但我做了一些猜測和假設你有一個XHTML文件

<table> 
    <tr> 
    <td>Name</td> 
    <td>Result</td> 
    <td>AutotestID</td> 
    <td>AutotestResult</td> 
    <td>AutotestName</td> 
    </tr> 
    <tr> 
    <td>X</td> 
    <td>Pass</td> 
    <td>X86HZS1</td> 
    <td></td> 
    <td></td> 
    </tr> 
</table> 

和你正在試圖創建後,選擇下一個<td>元素的XPath表達式包含文本「X86HZS1」(自動測試標識)的文件。要查找具有特定文本內容的節點,可以使用軸following-sibling以文檔順序顯示的謂詞和出現在該節點之後的同胞元素。一個適當的XPath表達式將

//td[.='X86HZS1']/following-sibling::td[1] 

如果您匹配相同AutotestID多次出現的表中的數據,該表達式匹配所有這些,將返回集而不是單個節點的節點。

編輯:通常在不需要時不建議使用//,因爲它需要遍歷整個文檔。使用更直接的路徑(如評論中提到的)會產生更高效的XPath表達式。

+0

很好的答案。但不建議在不需要時啓動'//'運算符。你應該使用:'/ table/td [。='X86HZS1']/following-sibling :: td [1]' – 2010-08-30 14:34:45

+0

是的,我知道'//'很慢並且經常可以避免。這一次我只是用它,因爲XML文檔的整個結構是我的猜測,我不知道OP將處理什麼樣的樹。不過,你有一個好點,我可能還是應該強調,用更精確的匹配來替換'//'會更好。 – jasso 2010-08-30 14:43:10