【问题标题】:XSLT Copy all nodes and only the last occurrence of a specific repeating nodeXSLT 复制所有节点和特定重复节点的最后一次出现
【发布时间】:2022-11-19 13:41:50
【问题描述】:

我希望在 XSLT 1.0 中编写一些实现以下目标的东西:

输入 XML:

<parent>
    <header>
        <value1>1</value1>
        <value2>2</value2>
    </header>

    <repeating>
        <repeat>
            <rvalue1>1</rvalue1>
            <rvalue2>2</rvalue2>
        </repeat>
        <repeat>
            <rvalue1>3</rvalue1>
            <rvalue2>4</rvalue2>
        </repeat>
        <repeat>
            <rvalue1>5</rvalue1>
            <rvalue2>6</rvalue2>
        </repeat>
    </repeating>
</parent>

输出 XML:

<parent>
    <header>
        <value1>1</value1>
        <value2>2</value2>
    </header>

    <repeating>
        <repeat>
            <rvalue1>5</rvalue1>
            <rvalue2>6</rvalue2>
        </repeat>
    </repeating>
</parent>

我要复制的总是列表中的最后一个。任何关于如何做到这一点的帮助都会很棒。谢谢!

我尝试使用带有单独模板匹配的身份模板,包括带有 last() 的内容,但无法获得我想要的结果。

【问题讨论】:

  • 下次发布您的尝试,这样我们就可以修复它,而不必从头开始为您编写代码。

标签: xml xslt xslt-1.0


【解决方案1】:

试试这样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="repeating">
    <xsl:copy>
        <xsl:apply-templates select="repeat[last()]"/>
    </xsl:copy>
</xsl:template>
 
</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多