我正在尝试使用XSLT转换数据集。只有一个部分应该获得额外的标签。
<formData>
<baseFields>
<elementA>TEST</elementA>
<elementB>TEST2</elementB>
</baseFields>
<dataFields>
<groupA>
<elementA>TEST</elementA>
<elementB>TEST2</elementB>
</groupA>
<groupB>
<elementA>TEST</elementA>
<elementB>TEST2</elementB>
</groupB>
</dataFields>
</formData>
进入
<formData>
<elementA>TEST</elementA>
<elementB>TEST2</elementB>
<groupA>
<elementA><asCurrent>TEST</asCurrent></elementA>
<elementB><asCurrent>TEST2</asCurrent></elementB>
</groupA>
<groupB>
<elementA><asCurrent>TEST</asCurrent></elementA>
<elementB><asCurrent>TEST2</asCurrent></elementB>
</groupB>
</formData>
应删除baseFields组和dataFields组,并将dataFields部分中的节点或文本元素包装在asCurrent标记中。
任何帮助将不胜感激!
更新 基于Dan Field的帮助,我能够使用以下XSLT处理它。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="baseFields">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="dataFields">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dataFields//text()">
<asCurrent><xsl:copy><xsl:apply-templates select="text()"/></xsl:copy></asCurrent>
</xsl:template>
</xsl:transform>
答案 0 :(得分:0)
一种方法是使用模板进行简单的身份转换,以匹配您要丢弃的标签,只需应用下一个模板:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="baseFields">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="dataFields">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>