Ich habe einige XML, die ich mit XSL restrukturieren bin versucht. Ich bin zu XSL ziemlich neu, also würde jede mögliche Hilfe geschätzt.Wie mit XSL mehrere XML-Einträge in einen Baum verschmelzen
Mein aktueller XML ist zur Zeit für mich wie dieses gegeben.
<catalogItem>
<partNumber>114-0015</partNumber>
<itemName>This is Item 1</itemName>
<price>$5.69</price>
</catalogItem>
<catalogItem>
<partNumber>114-0016</partNumber>
<itemName>This is Sub-item1</itemName>
<price>$6.29</price>
<parent>114-0015</parent>
</catalogItem>
<catalogItem>
<partNumber>114-0017</partNumber>
<itemName>This is Sub-item2</itemName>
<price>$7.29</price>
<parent>114-0015</parent>
</catalogItem>
<catalogItem>
<partNumber>114-0018</partNumber>
<itemName>This is Sub-item3</itemName>
<price>$8.29</price>
<parent>114-0015</parent>
</catalogItem>
Ich frage mich, ob es möglich ist, sie zu restrukturieren, so dass jede CatalogItem mit einem übergeordneten Tag in eine XML-Baumstruktur erhält eingeführt würde. Beachten Sie, dass das übergeordnete Tag mit der Teilenummer dieses übergeordneten Elements übereinstimmt. So würde meine letzte Ausgabe sein:
<catalogItem>
<partNumber>114-0015</partNumber>
<itemName>This is Item 1</itemName>
<price>$5.69</price>
<subitem>
<subPartNumber>114-0016</subPartNumber>
<subItemName>This is Sub-item1</subItemName>
<subPrice>$6.29</subPrice>
</subitem>
<subitem>
<subPartNumber>114-0017</subPartNumber>
<subItemName>This is Sub-item2</subItemName>
<subPrice>$7.29</subPrice>
</subitem>
<subitem>
<subPartNumber>114-0018</subPartNumber>
<subItemName>This is Sub-item3</subItemName>
<subPrice>$8.29</subPrice>
</subitem>
</catalogItem>
Könnte jemand bitte mich in die richtige Richtung (hoffentlich einige Code-Beispiele zur Verfügung stellen), die mir helfen würde, aus. Danke!
EDIT: Ich bin auch meine aktuelle Xslt einschließlich, dass ich einige andere Transformationen zu tun bin mit.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<dataroot>
<xsl:for-each select="dataroot/catalogItem">
<catalogItem>
<xsl:if test="not(partNumber)"><Intro>
<xsl:if test="not(partNumber)"><itemNameIntro><xsl:value-of select="itemName"/></itemNameIntro></xsl:if>
<xsl:if test="not(partNumber)"><longDescriptionIntro><xsl:value-of select="longDescription"/></longDescriptionIntro></xsl:if>
</Intro></xsl:if>
<xsl:copy-of select="photo1"/>
<xsl:copy-of select="categoryType"/>
<xsl:copy-of select="bookSeries"/>
<xsl:copy-of select="photo2"/>
<xsl:copy-of select="photo3"/>
<xsl:copy-of select="photo4"/>
<xsl:copy-of select="logo"/>
<xsl:if test="partNumber"><itemName><xsl:value-of select="itemName"/></itemName></xsl:if>
<xsl:copy-of select="author"/>
<xsl:if test="partNumber"><longDescription><xsl:value-of select="longDescription"/></longDescription></xsl:if>
<xsl:if test="size1">
<size1><xsl:value-of select="size1"/><xsl:if test="size1 and size2"> | </xsl:if></size1>
</xsl:if>
<xsl:copy-of select="size2"/>
<xsl:if test="age">
<age><xsl:if test="size1 and age or size2 and age"> | </xsl:if>age: <xsl:value-of select="age"/></age>
</xsl:if>
<xsl:if test="numberPages">
<numberPages><xsl:value-of select="numberPages"/>p </numberPages>
</xsl:if>
<xsl:copy-of select="partNumber"/>
<xsl:if test="price">
<pricetab> $</pricetab>
</xsl:if>
<xsl:if test="price">
<price><xsl:value-of select="price"/></price>
</xsl:if>
</catalogItem>
</xsl:for-each>
</dataroot>
Da die 'catalogItem' mit' 114-0018 '' hat 114-0016 ', verstehe ich nicht das gewünschte Ergebnis gebucht haben. –
Mein schlechtes. Ich habe es repariert. Es sollte 114-0015 – user6621322