如何使用XSLT转换此XML文件

时间:2012-05-12 09:32:20

标签: xml xslt

我该如何进行此转换。我想转换原始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>

1 个答案:

答案 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>