首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT复制和更改父级

XSLT复制和更改父级
EN

Stack Overflow用户
提问于 2017-01-24 18:24:23
回答 1查看 248关注 0票数 0

我试图将一个节点复制到另一个父节点,并更改我将得到的xml输出的根。

XML输入:

代码语言:javascript
复制
<root version="2">
<address>
    <id>300000001</id>
    <name>Test</name>
    <owner>
        <code>NWE</code>
    </owner>
    <magazin>
        <id>300000001</id>
        <kind>
            <code>JU</code>
        </kind>
        <storage>
            <kinds>
                <code>JUc</code>
            </kinds>
            <capacity>5800</capacity>
        </storage>
        <extra>
            <extra name="nr">22</extra>
        </extra>
    </magazin>
</address>
</root>

期望产出:

代码语言:javascript
复制
<tag>
<root version="2">
    <address>
        <id>300000001</id>
        <name>Test</name>
        <owner>
            <code>NWE</code>
        </owner>            
    </address>
</root>
<root version="2">
    <magazin>
        <id>300000001</id>
        <kind>
            <code>JU</code>
        </kind>
        <storage>
            <kinds>
                <code>JUc</code>
            </kinds>
            <capacity>5800</capacity>
        </storage>
        <extra>
            <extra name="nr">22</extra>
        </extra>
    </magazin>
</root>
 </tag>

基本上,我希望将节点"magazin“复制到另一个"root”标记中,将其与第一个标记分开,并将所有这些输出放在称为" tag“的标记下面。我的XSL似乎只是复制,我希望你能帮我找出缺少什么,以及如何正确使用。

目前的XSL:

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="magazin">
    <root version='2'>
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </root>
</xsl:template>

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 19:16:02

这样试一试:

XSLT1.0

代码语言:javascript
复制
<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="/root">
    <tag>
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
        <xsl:copy>
            <xsl:copy-of select="@* | address/magazin"/>
        </xsl:copy>
    </tag>
</xsl:template>

<xsl:template match="magazin"/>

</xsl:stylesheet>

这会将magazin节点复制到root的第二个副本中,并禁止将其复制到第一个副本中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41836245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档