使用XSLT替换XML节点仅在根级别起作用

使用XSLT替换XML节点仅在根级别起作用,xslt,Xslt,我正在开发一个功能,我应该将现有的XML节点替换为另一个。我已经写了代码来实现同样的功能。但是,它只是替换根节点,而不是子节点。如果注意到根节点SpecExportViewModel被节点Spec替换,则子节点将按原样返回,而不进行转换。例如,根据XSLT代码,节点OpeningsExportViewModel不会被节点DRSCHEDS替换。有什么建议我哪里出了问题吗 请在下面找到我的XML和XSLT文件 - - 1945 统一 统一 1. 霍萨塞特 像 UNK UNK 20页 84 41 1

我正在开发一个功能,我应该将现有的XML节点替换为另一个。我已经写了代码来实现同样的功能。但是,它只是替换根节点,而不是子节点。如果注意到根节点SpecExportViewModel被节点Spec替换,则子节点将按原样返回,而不进行转换。例如,根据XSLT代码,节点OpeningsExportViewModel不会被节点DRSCHEDS替换。有什么建议我哪里出了问题吗

请在下面找到我的XML和XSLT文件

- - 1945 统一 统一 1. 霍萨塞特 像 UNK UNK 20页 84 41 1.75 不 第三方 错误的 错误的 验证 4.875
你在模板匹配中的XPath错误。 SpecExportViewModel/OpeningsExportViewModel,以及 SpecExportViewModel/OpeningExportViewModel/Openings

Openings是输入中OpeningsExportViewModel的父项,而不是子项

如果只是要更改元素名称,并保持属性和其他未指定节点相同,请使用此名称:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="SpecExportViewModel">
    <Spec>
        <xsl:apply-templates select="@*|node()" />
    </Spec>
</xsl:template>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="SpecExportViewModel/Openings">
    <DRSCHEDS>
        <xsl:apply-templates select="@* | node()" />
    </DRSCHEDS>
</xsl:template>
<xsl:template match="SpecExportViewModel/Openings/OpeningsExportViewModel">
    <DRSCHED>
        <xsl:apply-templates select="@* | node()" />
    </DRSCHED>
</xsl:template>
</xsl:stylesheet>

谢谢Lingamurthy。我的错。