2012-05-12 16 views
-2

この変換を行うにはどうすればよいですか。元のXMLを変換して新しいXMLを保存したい。XSLTを使用してこの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:templatyソリューションの試みのために

<marker name="Melbourne"> 
<maxTemperature>19.2</maxTemperature> 
<minTemperature>7.9</minTemperature> 
<rainTo9am>4.8</rainTo9am> 
<windRun>82</windRun> 
</marker> 

答えて

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> 

以下よりWYSIWYGソリューションの試みのため:

<?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>  
関連する問題