除了孙子节点之外的匹配节点

时间:2012-07-09 20:58:09

标签: xslt xpath html-lists

背景

将文档从OpenOffice转换为DocBook格式。

问题

该文件的部分内容包括:

<ul><li><ul><li><ul><li><p>...</p></li></ul></li></ul></li></ul>

虽然文件的其他部分包括:

<ul><li><p>...</p></li></ul>

我尝试使用以下内容匹配最里面的ul标记:

<xsl:template match="xhtml:ul[not(child::xhtml:li/child::xhtml:ul)]">
...
</xsl:template>

但这不匹配。以下表达式:

<xsl:template match="xhtml:ul">

将按预期创建:

<itemizedlist>
<itemizedlist>
<itemizedlist>
...
</itemizedlist>
</itemizedlist>
</itemizedlist>

期望输出

无论ul嵌套如何,所需的输出格式为:

<itemizedlist>
...
</itemizedlist>

问题

匹配最里面的子ul节点的正确语法是什么?

有几种方法可以解决这个问题:

  • 搜索/替换原始文档(只有~20个实例)。
  • xsl:test节点中使用li查看子节点是否为ul

什么XPath表达式可以工作?例如:

<xsl:template match="xhtml:ul[not(grandchild::xhtml:ul)]">

谢谢!

1 个答案:

答案 0 :(得分:0)

<xsl:template match="xhtml:ul[not(descendant::xhtml:ul)]">
  <itemizedlist><xsl:apply-templates /></itemizedlist>
</xsl:template>