Xml: Werte mit xsl dividieren
Hallo zuammen,
nach langer Zeit hab ich wieder mal eine Frage.
Ich hoffe jemand kann mit helfen?
Ich habe folgende xml:
<?xml version="1.0" encoding="UTF-8"?><smart:measuringdata xmlns:smart="http://www.abcde">
<smart:data smart:id="DE123456789" smart:series="Entnahme" smart:unit="KWh">
<smart:value smart:date="2015-04-15T00:15:00+01:00">125</smart:value>
<smart:value smart:date="2015-04-15T00:30:00+01:00">124</smart:value>
<smart:value smart:date="2015-04-15T00:45:00+01:00">128</smart:value>
<smart:value smart:date="2015-04-15T01:00:00+01:00">144</smart:value>
<smart:value smart:date="2015-04-15T01:15:00+01:00">123</smart:value>
<smart:value smart:date="2015-04-15T01:30:00+01:00">125</smart:value>
<smart:value smart:date="2015-04-15T01:45:00+01:00">152</smart:value>
<smart:value smart:date="2015-04-15T02:00:00+01:00">104</smart:value>
<smart:value smart:date="2015-04-15T02:15:00+01:00">112</smart:value>
<smart:value></smart:data></smart:measuringdata>
Die Werte hinter dem Datum sind Stromverbrauchswerte in KWh und sollen aber in MWh umgerechnet werden.
Gibt es eine Möglichkeit mit xsl die Werte durch 1000 zu dividieren und auszugeben.
Die ausgegebene Xml sollte gleich aussehen wie die vorgegebene nur die Werte dann in MWh.
Wäre echt dankbar für jegliche Unterstützung.
Mein Wissen reicht leider nicht aus um das zu lösen, deswegen hoffe ich dass mir ein Experte hier helfen kann!?
Gruß
tester23
nach langer Zeit hab ich wieder mal eine Frage.
Ich hoffe jemand kann mit helfen?
Ich habe folgende xml:
<?xml version="1.0" encoding="UTF-8"?><smart:measuringdata xmlns:smart="http://www.abcde">
<smart:data smart:id="DE123456789" smart:series="Entnahme" smart:unit="KWh">
<smart:value smart:date="2015-04-15T00:15:00+01:00">125</smart:value>
<smart:value smart:date="2015-04-15T00:30:00+01:00">124</smart:value>
<smart:value smart:date="2015-04-15T00:45:00+01:00">128</smart:value>
<smart:value smart:date="2015-04-15T01:00:00+01:00">144</smart:value>
<smart:value smart:date="2015-04-15T01:15:00+01:00">123</smart:value>
<smart:value smart:date="2015-04-15T01:30:00+01:00">125</smart:value>
<smart:value smart:date="2015-04-15T01:45:00+01:00">152</smart:value>
<smart:value smart:date="2015-04-15T02:00:00+01:00">104</smart:value>
<smart:value smart:date="2015-04-15T02:15:00+01:00">112</smart:value>
<smart:value></smart:data></smart:measuringdata>
Die Werte hinter dem Datum sind Stromverbrauchswerte in KWh und sollen aber in MWh umgerechnet werden.
Gibt es eine Möglichkeit mit xsl die Werte durch 1000 zu dividieren und auszugeben.
Die ausgegebene Xml sollte gleich aussehen wie die vorgegebene nur die Werte dann in MWh.
Wäre echt dankbar für jegliche Unterstützung.
Mein Wissen reicht leider nicht aus um das zu lösen, deswegen hoffe ich dass mir ein Experte hier helfen kann!?
Gruß
tester23
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269464
Url: https://administrator.de/contentid/269464
Ausgedruckt am: 15.11.2024 um 11:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo tester23,
habe zwar jetzt im Moment nichts als XSL (-edit- siehe weiter u.) aber via Powershell würde ich das so machen. Falls du es gebrauchen kannst
Grüße Uwe
p.s. Bitte nutze in Zukunft Code-Tags für deinen Quellcode:
-edit- mit XSL sollte folgendes gehen
Das ergibt dann folgenden Output für deine XML-Datei
habe zwar jetzt im Moment nichts als XSL (-edit- siehe weiter u.) aber via Powershell würde ich das so machen. Falls du es gebrauchen kannst
#Pfad zur XML
$xmlfile = 'c:\temp\smartmeter.xml'
$xml = New-Object XML
# XML laden
$xml.Load($xmlfile)
# Namespace Manager für verwendeten Namespace in der XML (Bitte anpassen)
[System.Xml.XmlNamespaceManager]$nsm = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
$nsm.AddNamespace('smart','http://www.abcde')
# Nodes selektieren
$nodes = $xml.SelectNodes("//smart:value",$nsm)
# für jeden Node
$nodes | %{$_.innerText = [int32]$_.innerText / 1000}
# speichern
$xml.Save($xmlfile)
p.s. Bitte nutze in Zukunft Code-Tags für deinen Quellcode:
<code> Quellcode </code>
ansonsten gehen hier wichtige Zeichen der XML-Datei verloren, denn so ist es noch nicht mal XML-Konform! Merci.-edit- mit XSL sollte folgendes gehen
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:smart="http://www.abcde">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/smart:measuringdata">
<smart:measuringdata>
<xsl:for-each select="smart:data">
<smart:data>
<xsl:for-each select="@smart:id">
<xsl:attribute name="smart:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="@smart:series">
<xsl:attribute name="smart:series">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="@smart:unit">
<xsl:attribute name="smart:unit">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="smart:value">
<smart:value>
<xsl:for-each select="@smart:date">
<xsl:attribute name="date">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:value-of select="(.) div (1000)"/>
</smart:value>
</xsl:for-each>
</smart:data>
</xsl:for-each>
</smart:measuringdata>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<smart:measuringdata xmlns:smart="http://www.abcde">
<smart:data smart:id="DE123456789" smart:series="Entnahme" smart:unit="KWh">
<smart:value date="2015-04-15T00:15:00+01:00">0.125</smart:value>
<smart:value date="2015-04-15T00:30:00+01:00">0.124</smart:value>
<smart:value date="2015-04-15T00:45:00+01:00">0.128</smart:value>
<smart:value date="2015-04-15T01:00:00+01:00">0.144</smart:value>
<smart:value date="2015-04-15T01:15:00+01:00">0.123</smart:value>
<smart:value date="2015-04-15T01:30:00+01:00">0.125</smart:value>
<smart:value date="2015-04-15T01:45:00+01:00">0.152</smart:value>
<smart:value date="2015-04-15T02:00:00+01:00">0.104</smart:value>
<smart:value date="2015-04-15T02:15:00+01:00">0.112</smart:value>
</smart:data>
</smart:measuringdata>