我有一个XSLT转换,它将节点NADR_KOD的名称更改为NADR_KOD2,并复制剩余的XML而不做任何更改。 今天我想添加另一个将属性更改为元素的转换(我在堆栈上找到了解决方案)但是这两个转换在一个xslt中不起作用...
出现问题因为我没有在SSIS中加载'date'属性。 XML Source始终将date返回为null。也许你可以帮我解决这个问题?
XML的结构:
<DATA>
<ACCIDENT date="...">
<INFO>
<TEMP>
<NADR_KOD>
<NADR_KOD>Code</NADR_KOD>
</NADR_KOD>
</TEMP>
</INFO>
</ACCIDENT>
</DATA>
这是我想要的:
<DATA>
<ACCIDENT>
<date>...</date>
<INFO>
<TEMP>
<NADR_KOD>
<NADR_KOD2>Code</NADR_KOD2>
</NADR_KOD>
</TEMP>
</INFO>
</ACCIDENT>
</DATA>
我有几个像这样的类似转换。我是这样做的:
<xsl:template match="ACCIDENT">
<!-- output a filter element -->
<xsl:element name="ACCIDENT">
<!-- add the name attribute, using the source name attribute value -->
<xsl:element name="date">
<xsl:value-of select="@date"/>
</xsl:element>
<!-- add the rest of attributes without change -->
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="NADR_KOD/NADR_KOD">
<NADR_KOD2>
<xsl:apply-templates select="@*|node()"/>
</NADR_KOD2>
</xsl:template>
此代码不会将NADR_KOD更改为NADR_KOD2。 提前谢谢......
答案 0 :(得分:0)
我认为不是
<!-- add the rest of attributes without change -->
<xsl:copy-of select="node()"/>
你只想要
<!-- run the child elements through the identity transformation template for copying
or my templates for transforming -->
<xsl:apply-templates/>
然后你可以使用
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
当然还有你的
<xsl:template match="NADR_KOD/NADR_KOD">
<NADR_KOD2>
<xsl:apply-templates select="@*|node()"/>
</NADR_KOD2>
</xsl:template>
如果您想要转换更多元素,则可以为它们添加模板。