gpt4 book ai didi

xml - XSL展平嵌套列表

转载 作者:行者123 更新时间:2023-12-03 16:57:22 28 4
gpt4 key购买 nike

这与我几个月前提出的问题相反。我的嵌套结构需要展平。例如,输入可能是这样的:

<root>
<h1>text</h1>
<ol>
<li>num1</li>
<li>num2
<ol>
<li>sub-num1</li>
<li>sub-num2
<ol>
<li>sub-sub-num1</li>
</ol>
</li>
</ol>
</li>
<li>num3</li>
</ol>
<p>text</p>
<ol>
<li>num1</li>
<li>num2</li>
</ol>
<h2>text</h2>
</root>


并且输出应按以下方式展平:

<root>
<h1>text</h1>
<list level="1">num1</list>
<list level="1">num2</list>
<list level="2">sub-num1</list>
<list level="2">sub-num2</list>
<list level="3">sub-sub-num1</list>
<list level="1">num3</list>
<p>text</p>
<list level="1">num1</list>
<list level="1">num2</list>
<h2>text</h2>
</root>


我认为我可以通过优雅的方式做到这一点,但我希望有人可以有更好的分享方法。这需要使用XSLT 1.0完成

最佳答案

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ol">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="li">
<list level="{count(ancestor::ol)}">
<xsl:apply-templates select="node()[not(self::ol)]"/>
</list>
<xsl:apply-templates select="ol"/>
</xsl:template>
</xsl:stylesheet>


输出:

<root>
<h1>text</h1>
<list level="1">num1</list>
<list level="1">num2
</list>
<list level="2">sub-num1</list>
<list level="2">sub-num2
</list>
<list level="3">sub-sub-num1</list>
<list level="1">num3</list>
<p>text</p>
<list level="1">num1</list>
<list level="1">num2</list>
<h2>text</h2>
</root>

关于xml - XSL展平嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173511/

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