如何使用 xslt 移动 xml 元素?

罗伯托·巴西勒

我有以下 XML:

<?xml version="1.0" encoding="UTF-8"?> 
<flow xmlns:*** xmlns:xsi=*** xsi:schemaLocation=***> 
    <version>1.0</version> 
    <id>15</id> 
    <date>2018-01-01</date> 
    <sender> 
        <senderId> 
            <idType>G</idType> 
            <idCode>code</idCode> 
        </senderId> 
        <senderName>name</senderName> 
    </sender> 
    <paymentsNumber>2</paymentsNumber> 
    <paymentsTotal>800.40</paymentsTotal> 
    <payment> 
        <paymentId>1</paymentId> 
        <paymentAmount>400.20</paymentAmount> 
        <paymentResult>0</paymentResult> 
        <paymentDate>2018-02-01</paymentDate> 
    </payment> 
    <payment> 
        <paymentId>2</paymentId> 
        <paymentAmount>400.20</paymentAmount> 
        <paymentResult>0</paymentResult> 
        <paymentDate>2018-02-02</paymentDate> 
    </payment> 
</flow>

我必须进入<payment>元素

<version>1.0</version> 
<id>15</id> 
<date>2018-01-01</date>

获取以下xml:

<?xml version="1.0" encoding="UTF-8"?> 
<flow xmlns:*** xmlns:xsi=*** xsi:schemaLocation=***> 
    <sender> 
        <senderId> 
            <idType>G</idType> 
            <idCode>code</idCode> 
        </senderId> 
        <senderName>name</senderName> 
    </sender> 
    <paymentsNumber>2</paymentsNumber> 
    <paymentsTotal>800.40</paymentsTotal> 
    <payment> 
        <version>1.0</version> 
        <id>15</id> 
        <date>2018-01-01</date> 
        <paymentId>1</paymentId> 
        <paymentAmount>400.20</paymentAmount> 
        <paymentResult>0</paymentResult> 
        <paymentDate>2018-02-01</paymentDate> 
    </payment> 
    <payment>
        <version>1.0</version> 
        <id>15</id> 
        <date>2018-01-01</date> 
        <paymentId>2</paymentId> 
        <paymentAmount>400.20</paymentAmount> 
        <paymentResult>0</paymentResult> 
        <paymentDate>2018-02-02</paymentDate> 
    </payment> 
</flow>

如何使用 XSLT 实现此目标?任何帮助将不胜感激!

Aniket V

您需要从identity template将所有元素按原样复制到输出 XML 开始。

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

接下来,<version><id><date>要移动的儿童<payment>元素。这可以通过将它们复制到<payment>.

<xsl:template match="payment">
    <xsl:copy>
        <xsl:copy-of select="../version | ../id | ../date" />
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>

最后,将删除<version>,<id><date>under <flow>,因此创建一个与这些元素匹配的模板,但什么也不做。

<xsl:template match="version | id | date" />

完整的 XSLT 如下

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

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="payment">
        <xsl:copy>
            <xsl:copy-of select="../version | ../id | ../date" />
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="version | id | date" />
</xsl:stylesheet>

输出

<flow>
    <sender>
        <senderId>
            <idType>G</idType>
            <idCode>code</idCode>
        </senderId>
        <senderName>name</senderName>
    </sender>
    <paymentsNumber>2</paymentsNumber>
    <paymentsTotal>800.40</paymentsTotal>
    <payment>
        <version>1.0</version>
        <id>15</id>
        <date>2018-01-01</date>
        <paymentId>1</paymentId>
        <paymentAmount>400.20</paymentAmount>
        <paymentResult>0</paymentResult>
        <paymentDate>2018-02-01</paymentDate>
    </payment>
    <payment>
        <version>1.0</version>
        <id>15</id>
        <date>2018-01-01</date>
        <paymentId>2</paymentId>
        <paymentAmount>400.20</paymentAmount>
        <paymentResult>0</paymentResult>
        <paymentDate>2018-02-02</paymentDate>
    </payment>
</flow>

请注意这里没有考虑命名空间。在您的 XSLT 中,您需要相应地映射这些名称空间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用XSLT移动元素

来自分类Dev

使用 xslt-3 将元素从 xml 文件移动到另一个 xml 元素

来自分类Dev

使用xslt将一个XML节点的元素移动到子节点

来自分类Dev

如何使用xslt转换嵌套的XML元素?

来自分类Dev

xml使用xslt删除元素

来自分类Dev

使用 XSLT 映射 XML 元素

来自分类Dev

使用XDT移动XML元素

来自分类Dev

使用XDT移动XML元素

来自分类Dev

将标签移动到子元素 xml - xslt

来自分类Dev

使用 xslt 将 XML 元素从其位置移动到另一个父元素下

来自分类Dev

如何使用带条件的 XSLT 映射移动 XML 中的节点

来自分类Dev

如何使用XSLT复制XML元素(每个元素的根除外)

来自分类Dev

使用XSLT基于属性合并Xml元素

来自分类Dev

使用XSLT递归删除空的xml元素

来自分类Dev

使用XSLT递归删除空的xml元素

来自分类Dev

使用XSLT添加新的XML元素

来自分类Dev

使用XSLT基于属性合并Xml元素

来自分类Dev

使用 XSLT 更改 XML 元素标记

来自分类Dev

如果存在,如何在 XSLT 中移动元素

来自分类Dev

如何使用XSLT遍历xml文档中的元素

来自分类Dev

如何使用XSLT在xml中插入新元素

来自分类Dev

如何使用XSLT遍历xml文档中的元素

来自分类Dev

如何使用XSLT在xml中插入新元素

来自分类Dev

如何使用XSLT从XML架构中提取元素名称?

来自分类Dev

如何使用xslt将元素的列表类型重构为xml

来自分类Dev

如何使用 XSLT 检查 xml 元素值是否为“空”?

来自分类Dev

XML XSLT-> HTML转换-如何使用xslt将xml元素文本拆分为点

来自分类Dev

使用XSLT将XML的节点移动到单独的新节点

来自分类Dev

使用XSLT从XML创建XML-播放所有元素