我想将一个元素从一个节点复制到另一个节点。例如,我的输入xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Institutions>
<Schools>
<schoolOne>schoolOne</schoolOne>
<scholTwo>scholTwo</scholTwo>
</Schools>
<Colleges>
<CollegeOne>CollegeOne</CollegeOne>
<CollegeTwo>CollegeTwo</CollegeTwo>
</Colleges>
</Institutions>
我想在<CollegeTwo>CollegeTwo</CollegeTwo>
节点下移动<Schools>
。
即我的输出xml应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Institutions>
<Schools>
<schoolOne>schoolOne</schoolOne>
<scholTwo>scholTwo</scholTwo>
<CollegeTwo>CollegeTwo</CollegeTwo>
</Schools>
<Colleges>
<CollegeOne>CollegeOne</CollegeOne>
<CollegeTwo>CollegeTwo</CollegeTwo>
</Colleges>
</Institutions>
任何帮助实现这一点是值得赞赏的。 提前谢谢。
我尝试使用以下代码,但它不适用于我。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="//Colleges/CollegeTwo" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
您已通过加入身份转换
开始走上正轨<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
就其本身而言,这将按原样复制节点,这意味着您只需要为要更改的节点编写模板(XSLT将优先考虑与特定元素匹配的模板)
在您的情况下,您想要将新子项添加到学校元素,因此您需要更改第二个模板以匹配此元素(正如您当前所做的那样匹配/
将匹配文档节点,在这种情况下,这不是您想要的。)
<xsl:template match="Schools">
您已经有了复制 CollegeTwo 元素的代码,但此时您还需要确保学校的现有子节点也被复制。 ( xsl:copy 复制当前节点,但不复制其属性或子节点。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Schools">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:apply-templates select="//Colleges/CollegeTwo" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>