我是XSLT的新手,我正在努力完成下面的工作。我试图通过添加节点名称作为附加节点来减少XML文档中的层次结构。我虽然无法编写正确的XSLT。还有,有没有其他方法来实现这一点(没有XSLT,任何工具?)?
感谢您的任何帮助。感谢。
输入XML:
<Rates>
<Rate1>
<Current>
<onsite>100</onsite>
<net>100</net>
<gross>100</gross>
</Current>
<Past>
<onsite>100</onsite>
<net>100</net>
<gross>100</gross>
</Past>
</Rate1>
<Rate2>
<Current>
<onsite>2100</onsite>
<net>2100</net>
<gross>2100</gross>
</Current>
<Past>
<onsite>2100</onsite>
<net>2200</net>
<gross>1200</gross>
</Past>
</Rate2>
</Rates>
预期输出:
<Rates>
<Rate>
<RateType>Rate1</RateType>
<RateHistory>Current</RateHistory>
<onsite>100</onsite>
<net>100</net>
<gross>100</gross>
</Rate>
<Rate>
<RateType>Rate1</RateType>
<RateHistory>Past</RateHistory>
<onsite>100</onsite>
<net>100</net>
<gross>100</gross>
</Rate>
<Rate>
<RateType>Rate2</RateType>
<RateHistory>Current</RateHistory>
<onsite>2100</onsite>
<net>2100</net>
<gross>2100</gross>
</Rate>
<Rate>
<RateType>Rate2</RateType>
<RateHistory>Past</RateHistory>
<onsite>2100</onsite>
<net>2200</net>
<gross>1200</gross>
</Rate>
</Rates>
答案 0 :(得分:2)
您正在寻找此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Current|Past">
<Rate>
<RateType><xsl:value-of select="name(..)"/></RateType>
<RateHistory><xsl:value-of select="name()"/></RateHistory>
<xsl:apply-templates/>
</Rate>
</xsl:template>
<xsl:template match="Rate1|Rate2">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:2)
假设提前知道费率类型不(并且不,假设Current
和Past
是唯一可能{{1}值})尝试:
RateHistory