首先.. 我对此完全陌生,而不是专业编码员.. 通常我制作小型 php 网站。
我有一个水冷系统。Watercoolingsystem 有一个 xml 输出,它将所有收集的数据写入一个 xml 文件,该文件将每 x 秒刷新一次。
现在我还有一个由 LCDhost 软件驱动的 G19 LCD 键盘。这个软件可以读取 XML 文件并显示值。
不幸的是 LCDhost 可以解释 Watercooling xml .. 我必须重建文件。
我开始环顾四周,但我在 XML 编码方面的技能是 -100 :(
文件看起来是这样的:
<?xml version="1.0" encoding="utf-8"?>
<LogDataExport xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>Aquasite2012</name>
<exportTime>2013-04-04T21:00:20.7286335+02:00</exportTime>
<logdata>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>24.72</value>
<name>Sensor 1</name>
<unit>°C</unit>
<valueType>temperature</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>46.63</value>
<name>Sensor 2</name>
<unit>°C</unit>
<valueType>temperature</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>29.68</value>
<name>aquaero CPU</name>
<unit>°C</unit>
<valueType>temperature</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>161</value>
<name>Flow 1</name>
<unit>l/h</unit>
<valueType>flow</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>149.7</value>
<name>Flow 2</name>
<unit>l/h</unit>
<valueType>flow</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>870</value>
<name>Fan 2</name>
<unit>rpm</unit>
<valueType>rpm</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>860</value>
<name>Fan 3</name>
<unit>rpm</unit>
<valueType>rpm</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.650</t>
<value>956</value>
<name>Fan 4</name>
<unit>rpm</unit>
<valueType>rpm</valueType>
<device>aquaero 5</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.363</t>
<value>80</value>
<name>Füllstand in %</name>
<unit>%</unit>
<valueType>percent</valueType>
<device>tubemeter</device>
</LogDataSet>
<LogDataSet>
<t>2013-04-04T21:00:20.164</t>
<value>26.6</value>
<name>Wassertemperatur</name>
<unit>°C</unit>
<valueType>temperature</valueType>
<device>aquastream xt</device>
</LogDataSet>
</logdata>
</LogDataExport>
我需要这样的输出:
<as2012>
<LogData>
<Date>03.04.2013</Date>
<Time>17:03:39</Time>
<Sensor1>19,90</Sensor1>
<Sensor2>19,90</Sensor2>
<Sensor3>---,--</Sensor3>
<Sensor4>18,90</Sensor4>
<Sensor5>21,90</Sensor5>
<Sensor6>21,60</Sensor6>
<Fan1Rpm>845</Fan1Rpm>
<Fan2Rpm>939</Fan2Rpm>
<Fan3Rpm>863</Fan3Rpm>
<Fan4Rpm>16640</Fan4Rpm>
<Fan1Power>100,00</Fan1Power>
<Fan2Power>100,00</Fan2Power>
<Fan3Power>100,00</Fan3Power>
<Fan4Power>100,00</Fan4Power>
<Led1Power>0,00</Led1Power>
<Led2Power>0,00</Led2Power>
<Flow1Hour>160,8300</Flow1Hour>
<Flow1Minute>2,6805</Flow1Minute>
<Flow2Hour>166,4000</Flow2Hour>
<Flow2Minute>2,7733</Flow2Minute>
<TubemeterLevel>255,00</TubemeterLevel>
<TubemeterWave>255,00</TubemeterWave>
<PowerSensor1>0,00</PowerSensor1>
<PowerSensor2>0,00</PowerSensor2>
<Aquastream1Voltage>0,0</Aquastream1Voltage>
<Aquastream1Current>0</Aquastream1Current>
<Aquastream1Power>0,0</Aquastream1Power>
<Aquastream1Frequence>120</Aquastream1Frequence>
<Aquastream2Voltage>0,0</Aquastream2Voltage>
<Aquastream2Current>0</Aquastream2Current>
<Aquastream2Power>0,0</Aquastream2Power>
<Aquastream2Frequence>120</Aquastream2Frequence>
</aquaero4LogData>
</aquaero4LogData>
我正在寻找一种方法,但我的知识很低..目前我有这个:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" version="1.0" indent="no" omit-xml-declaration="yes"/>
<xsl:template match="t">
<xsl:for-each select="t">
<xsl:value-of select="local-name()"/>
<xsl:value-of select="current()"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="unit">
<xsl:for-each select="unit">
<xsl:value-of select="local-name()"/>
<xsl:value-of select="current()"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="valueType">
<xsl:for-each select="valueType">
<xsl:value-of select="local-name()"/>
<xsl:value-of select="current()"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="device">
<xsl:for-each select="device">
<xsl:value-of select="local-name()"/>
<xsl:value-of select="current()"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="value">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="text() | comment() | processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
所以我删除了我不需要的行..但我不知道如何重命名。有人可以帮我重新构建 xml .. 我需要从每个 LogDataSet 中删除名称和值以及删除的所有其他节点。
由此:
<value>29.68</value>
<name>aquaero CPU</name>
对此:
<aquaero CPU>29.68</aquaero CPU>
先感谢您
麦克风