Dank der ausgezeichneten Antwort von Tim C in how transform from xml based on attributes to json and ignore the attributes from especific elements by using XSLT/XSL konnte ich lernen, wie ich mein Eingabe-XML in ein json transformiere und die Elementattribute während der Umwandlung ausschließe. Bitte beachten Sie die Eingabe-XML-Datei unten.Wie transformiere ich von xml nach json mit xsl und entferne die Element-/Datensatzbezeichnungen
Bitte, wie kann ich genau die gleiche Transformation aber ignorieren die "aa" und "bbb" in der Ausgabe json? Ich meine, wie schließe ich während der Xml-Transformation in Json die Datensatzbezeichner namens aa und bbb in meinem Fall aus?
In meiner realen Welt, aa wird immer zwei Ziffern (z. B. 99) für bestimmte Art von Artikeln stehen und BBB wird immer drei Ziffern (z. B. 999) für andere Art von Elementen stehen. Jedes Produkt ist eine Summe einiger aa plus irgendein bbb Art des Produktes. Da die Anzahl der Ziffern mir genau sagen, ob es ein Typ oder ein BBB-Typ ist, verstehe ich, dass ich eine Json-Otuput-Datei haben kann, die sowohl von json als auch von meinen Geschäftsperspektiven ein Ergebnis ohne "aa" und "bbb" Wörter erhält.
Eingabedatei:
<c:product xmlns:c="myapp">
<c:item cod="789">
<c:aa name="024" value="123"/>
<c:bbb name="0105" value="123456"/>
<c:bbb name="0122" value="T"/>
<c:aa name="071" value="00000001"/>
</c:item>
<c:item package="123" cod="11111">
<c:aa name="002" value="753"/>
<c:aa name="003" value="456"/>
<c:bbb name="0146" value="147852"/>
</c:item>
</c:product>
meine aktuelle Ausgabedatei, wenn meine aktuelle XSL angewendet wird:
[
{
"aa" : {"024":"123"},
"bbb" : {"0105":"123456"},
"bbb" : {"0122":"T"},
"aa" : {"071":"00000001"}
},
{
"aa" : {"002":"753"},
"aa" : {"003":"456"},
"bbb" : {"0146":"147852"}
}
]
meine aktuellen XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:c="myapp" exclude-result-prefixes="c">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[c:item]">
<xsl:text>[ </xsl:text>
<xsl:apply-templates select="c:item"/>
<xsl:text>] </xsl:text>
</xsl:template>
<xsl:template match="c:item">
<xsl:text> { </xsl:text>
<xsl:apply-templates />
<xsl:text> }</xsl:text>
<xsl:if test="following-sibling::c:item">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="c:item/*">
<xsl:text> "</xsl:text>
<xsl:value-of select="local-name()" />
<xsl:text>" : {"</xsl:text>
<xsl:value-of select="@name" />
<xsl:text>":"</xsl:text><xsl:value-of select="@value" />
<xsl:text>"}</xsl:text>
<xsl:if test="following-sibling::*">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
meine gewünschte Ausgabe, dass ich es verstehen ist sowohl business als auch json muster gültig:
[
{
{"024":"123"},
{"0105":"123456"},
{"0122":"T"},
{"071":"00000001"}
},
{
{"002":"753"},
{"003":"456"},
{"0146":"147852"}
}
]
Ihre gewünschte Ausgabe ist nicht gültig JSON, glaube ich. Versuchen Sie es unter http://jsonlint.com/ zu validieren. –
Möglicherweise möchten Sie etwas stattdessen ... http://xsltransform.net/jz1PuNH. Ich würde empfehlen, http://xsltransform.net zu verwenden, um Ihre XSLT zu testen, da Sie die Auswirkungen von Änderungen sofort sehen können. –
Tim C, danke. Du hast meine Frage perfekt beantwortet. Wie kann ich darauf hinweisen, dass dies die endgültige Antwort ist: xsltransform.net/jz1PuNH? Kannst du hier als Antwort posten? –