2013-10-31 63 views
1

我需要通過創建一個實現ITemplateStreamfilter類的類來修改trac瀏覽器視圖中的文件表。我嘗試使用genshi.filters.transformTransformer。我的表看起來像如何在使用Genshi的Transformer的父標籤之前插入HTML標籤?

<tbody>
<tr class="even">
<td class="name">
<a class="partent" title="Parent Directory" ..>..</a>
</td>
..
</tr>
..
</tbody>

我現在只需要在表的第一行中的弗里斯特細胞前插入</td>標籤。問題是,我只能通過搜索「父目錄」標題:Transformer('//*[@title="Parent Directory"]')來確定要放置新單元格的列的位置。如何將第一個標籤放在第一個<td class="name">標籤之前?

+0

你與http://genshi.edgewall.org/wiki/ApiDocs嘗試/genshi.filters.transform#genshi.filters.transform:Transformer:prepend? – falkb

+0

是的,我試了幾個小時。使用所有這些方法,我只能在當前標記之前,之後或之後插入數據。但是我需要我的數據比當前更多的標籤。 –

回答

1

我不是那熟悉的TransformerXPATH但支持:

什麼 Transformer('(//td[*[@title="Parent Directory"]])[1]'),然後使用before方法?

據我瞭解,這應該與屬性title="Parent Directory"選擇與子節點第一td節點。

如果你想選擇任何td用那種子節點使用 Transformer('//td[*[@title="Parent Directory"]]')

。然而,這僅適用如果Transformer支持這些XPATH表達式。

編輯1

如果你確定,你的td有一個屬性class="name"你也可以使用Transformer('(//td[class="name" and *[@title="Parent Directory"]])[1]')

+0

感謝您的意見。我試過你的建議,但變壓器不接受嵌入式XPATH表達式。我到目前爲止所做的是'Transformer('// tr [@ class =「even」]/td [@ class =「name」] [1]')。before(tag.td())'我想要它的地方,但對於所有具有class =「even」的行。似乎選擇'[0]'也不起作用。是否有另一種方式告訴Transformer只選擇第一次出現? –