【问题标题】:How can I insert a HTML tag before its parent tag using the Transformer from Genshi?如何使用 Genshi 的 Transformer 在其父标签之前插入 HTML 标签?
【发布时间】:2013-11-13 16:41:47
【问题描述】:

我需要通过创建一个实现ITemplateStreamfilter 类的类来修改我的trac 浏览器视图中的文件表。我尝试使用来自genshi.filters.transformTransformer。我的桌子看起来像

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

我现在需要在表格第一行的第一个单元格之前插入一个&lt;/td&gt; 标签。问题是我只能通过搜索“父目录”标题来识别我想要放置新单元格的列的位置:Transformer('//*[@title="Parent Directory"]')。我怎样才能提高一个标签而不是将新单元格放在第一个 &lt;td class="name"&gt; 标签之前?

【问题讨论】:

  • 是的,我试了好几个小时。使用所有这些方法,我只能在当前标签之前、之中或之后插入数据。但我需要我的数据比当前数据多一个标签。

标签: trac transformer genshi


【解决方案1】:

我不太熟悉对 XPATH 的支持 Transformer 但是:

怎么样 Transformer('(//td[*[@title="Parent Directory"]])[1]') 然后使用before 方法?

据我了解,这应该选择 first td 节点,其子节点的属性为 title="Parent Directory"

如果你想选择 any td 与那种子节点使用 Transformer('//td[*[@title="Parent Directory"]]')

但是,这只适用如果 Transformer 支持那些XPATH 表达式。

编辑 1

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

【讨论】:

  • 感谢您的意见。我尝试了您的建议,但转换器不接受嵌入 XPATH 表达式。到目前为止,我所做的是Transformer('//tr[@class="even"]/td[@class="name"][1]').before(tag.td()),它将标签放在我想要的位置,但对于所有带有class="even" 的行。似乎出现选择[0] 也不起作用。有没有其他方法可以告诉 Transformer 只选择第一次出现的地方?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2017-12-21
  • 2020-11-04
  • 2016-07-16
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多