gpt4 book ai didi

xslt - 使用 xslt 将 xhtml 转换为 wiki 语法

转载 作者:行者123 更新时间:2023-12-01 10:16:22 25 4
gpt4 key购买 nike

我想使用 xslt 将 xhtml 转换为 dokuwiki 语法

现在,我似乎无法解决的一件事是如何处理嵌套列表。 dokuwiki 语法对列表项使用星号 (*),每个嵌套级别以两个空格作为前缀(c.f. wiki syntax)。

我的问题:在下面的例子中, 如何匹配列表item 2.1.1 请注意它的嵌套级别,以便在前面加上适当数量的空格?

* list item 1
* list item 2
* list item 2.1
* list item 2.1.1
* list item 2.2
* list item 2.3
* list item 3

对应于

  • 列出第 1 项
  • 列表项目 2
    • 列表项 2.1
      • 列出项目 2.1.1
    • 列出项目 2.2
    • 列出项目 2.3
  • 列出第 3 项

下面的 html 是这样显示的:

<ul>
<li>
list item 1
</li>
<li>
list item 2
<ul>
<li>
list item 2.1
<ul>
<li>list item 2.1.1</li>
</ul>
</li>
<li>list item 2.2</li>
<li>list item 2.3</li>
</ul>
</li>
<li>
list item 3
</li>
</ul>

最佳答案

以下转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:strip-space elements="*"/>

<xsl:variable name="vBlanks"
select="' '"/>
<xsl:variable name="vnNestSpaces" select="2"/>


<xsl:template match="li">
<xsl:variable name="vNestLevel"
select="count(ancestor::li)"/>
<xsl:value-of select=
"concat('&#xA;',
substring($vBlanks,1,$vnNestSpaces*$vNestLevel),
'* ', normalize-space(text()[1])
)"/>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>

应用于原始 XML 文档时:

<ul>
<li> list item 1
</li>
<li> list item 2
<ul>
<li> list item 2.1
<ul>
<li>list item 2.1.1</li>
</ul>
</li>
<li>list item 2.2</li>
<li>list item 2.3</li>
</ul>
</li>
<li> list item 3 </li>
</ul>

产生期望的结果:

*  list item 1
* list item 2
* list item 2.1
* list item 2.1.1
* list item 2.2
* list item 2.3
* list item 3

请注意以下事项:

  1. 所需的缩进由 count(ancestor::li) 的值决定。

  2. 缩进空间直接取自足够大的空白行(包含足够 20 层嵌套的空白)。 不需要逐个递归输出空格

  3. 转换效率更高,由于上述2.

  4. 注意XPath的使用substring()功能。

关于xslt - 使用 xslt 将 xhtml 转换为 wiki 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/469844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com