正在努力進行 xslt 轉換。
我有兩個(或更多)相同的 <A_OutbDeliveryHeader> 節點,除了 <to_DeliveryDocumentItem> 部分。
<to_DeliveryDocumentItem>
<A_OutbDeliveryItemType>
...
</A_OutbDeliveryItemType>
</to_DeliveryDocumentItem>
因此,我想要一個 <A_OutbDeliveryHeader> 節點,在 <to_DeliveryDocumentItem> 中有多個條目。
<A_OutbDeliveryHeader>
<A_OutbDeliveryHeaderType>
<DeliveryDocumentType>LF</DeliveryDocumentType>
<to_DeliveryDocumentText>
...
</to_DeliveryDocumentText>
...
<to_DeliveryDocumentItem>
<A_OutbDeliveryItemType>
...
</A_OutbDeliveryItemType>
<A_OutbDeliveryItemType>
...
</A_OutbDeliveryItemType>
</to_DeliveryDocumentItem>
</A_OutbDeliveryHeaderType>
</A_OutbDeliveryHeader>
什么是最好的開始方式?通過...分組?不過我沒有鑰匙。注意:我可以使用 XSLT 2.0 或 3.0。
完整的示例 XML
<?xml version="1.0" encoding="UTF-8"?>
<A_OutbDeliveryHeader>
<A_OutbDeliveryHeaderType>
<DeliveryDocumentType>LF</DeliveryDocumentType>
<to_DeliveryDocumentText>
<A_OutbDeliveryHeaderTextType>
<DeliveryDocument>800005120</DeliveryDocument>
<TextElementText>Lorem Ipsum</TextElementText>
</A_OutbDeliveryHeaderTextType>
</to_DeliveryDocumentText>
<to_DeliveryDocumentItem>
<A_OutbDeliveryItemType>
<DeliveryDocumentItem>000010</DeliveryDocumentItem>
<Warehouse>103</Warehouse>
<ItemWeightUnit>KG</ItemWeightUnit>
<ActualDeliveryQuantity>3.000</ActualDeliveryQuantity>
<ReferenceSDDocumentItem>000010</ReferenceSDDocumentItem>
<Plant>1003</Plant>
</A_OutbDeliveryItemType>
</to_DeliveryDocumentItem>
</A_OutbDeliveryHeaderType>
<A_OutbDeliveryHeaderType>
<DeliveryDocumentType>LF</DeliveryDocumentType>
<to_DeliveryDocumentText>
<A_OutbDeliveryHeaderTextType>
<DeliveryDocument>800005120</DeliveryDocument>
<TextElementText>Lorem Ipsum</TextElementText>
</A_OutbDeliveryHeaderTextType>
</to_DeliveryDocumentText>
<to_DeliveryDocumentItem>
<A_OutbDeliveryItemType>
<DeliveryDocumentItem>000011</DeliveryDocumentItem>
<Warehouse>104</Warehouse>
<ItemWeightUnit>PC</ItemWeightUnit>
<ActualDeliveryQuantity>1.000</ActualDeliveryQuantity>
<ReferenceSDDocument>4858</ReferenceSDDocument>
</A_OutbDeliveryItemType>
</to_DeliveryDocumentItem>
</A_OutbDeliveryHeaderType>
</A_OutbDeliveryHeader>
編輯:到目前為止,我的 XSLT(我可以使用 XSLT 2.0 或 3.0)似乎可以解決問題。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//A_OutbDeliveryHeader">
<xsl:copy>
<xsl:for-each-group select="A_OutbDeliveryHeaderType" group-by="''">
<xsl:apply-templates select="@* | node()[not(self::to_DeliveryDocumentItem)]" />
<to_DeliveryDocumentItem>
<xsl:apply-templates select="current-group()/to_DeliveryDocumentItem/A_OutbDeliveryItemType" />
</to_DeliveryDocumentItem>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
看來您不需要分組,只需
<xsl:template match="A_OutbDeliveryHeader">
<xsl:copy>
<xsl:copy-of select="A_OutbDeliveryHeaderType[1]/(* except to_DeliveryDocumentItem)"/>
<to_DeliveryDocumentItem>
<xsl:copy-of select="A_OutbDeliveryHeaderType/to_DeliveryDocumentItem/A_OutbDeliveryItemType"/>
</to_DeliveryDocumentItem>
</xsl:copy>
</xsl:template>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466251.html
上一篇:從XML檔案中去除HTML標簽
