1

バックグラウンド

ドキュメントを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)]">

ありがとうございました!

4

1 に答える 1

0
<xsl:template match="xhtml:ul[not(descendant::xhtml:ul)]">
  <itemizedlist><xsl:apply-templates /></itemizedlist>
</xsl:template>
于 2012-07-09T22:10:45.790 に答える