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