我该如何进行此转换。我想转换原始XML并保存新的XML。
源XML:
<obs obs-time-local="20120424T0900" obs-time-utc="20120423T2300" time-zone="EST"
site="86071" station="Melbourne">
<d t="tx">19.2</d>
<d t="tn">7.9</d>
<d t="tg">4.6</d>
<d t="twd">0.6</d>
<d t="r">4.8</d>
<d t="ev">2.0</d>
<d t="wr">82</d>
<d t="t10">13.0</d>
<d t="t20">16.0</d>
</obs>
目标XML:
<marker name="Melbourne">
<maxTemperature>19.2</maxTemperature>
<minTemperature>7.9</minTemperature>
<rainTo9am>4.8</rainTo9am>
<windRun>82</windRun>
</marker>
答案 0 :(得分:1)
对于模板解决方案,请尝试:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="obs">
<marker name="{@station}">
<xsl:apply-templates />
</marker>
</xsl:template>
<xsl:template match="*" />
<xsl:template match="d[@t='tx']">
<maxTemperature><xsl:value-of select="." /></maxTemperature>
</xsl:template>
<xsl:template match="d[@t='tn']">
<minTemperature><xsl:value-of select="." /></minTemperature>
</xsl:template>
<xsl:template match="d[@t='r']">
<rainTo9am><xsl:value-of select="." /></rainTo9am>
</xsl:template>
<xsl:template match="d[@t='wr']">
<windRun><xsl:value-of select="." /></windRun>
</xsl:template>
</xsl:stylesheet>
对于更小的更具信心的解决方案,请尝试:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="obs">
<marker name="{@station}">
<maxTemperature><xsl:value-of select="d[@t='tx']" /></maxTemperature>
<minTemperature><xsl:value-of select="d[@t='tn']" /></minTemperature>
<rainTo9am><xsl:value-of select="d[@t='r']" /></rainTo9am>
<windRun><xsl:value-of select="d[@t='wr']" /></windRun>
</marker>
</xsl:template>
</xsl:stylesheet>