2013-10-31 35 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只选择第一次出现? –