【发布时间】:2018-10-24 11:55:33
【问题描述】:
我的输入 XML 是
<DataArea>
<ReceiveDelivery>
<ReceiveDeliveryHeader>
.....
</ReceiveDeliveryHeader>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
<ReceiveDeliveryHeader>
.....
</ReceiveDeliveryHeader>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
</ReceiveDelivery>
</DataArea>
而想要的输出是
<DataArea>
<ReceiveDelivery>
<ReceiveDeliveryHeader>
.....
</ReceiveDeliveryHeader>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
</ReceiveDelivery>
<ReceiveDelivery>
<ReceiveDeliveryHeader>
.....
</ReceiveDeliveryHeader>
<ReceiveDeliveryItem>
....
</ReceiveDeliveryItem>
</ReceiveDelivery>
</DataArea>
标题后面可以有 1 个或多个项目。我希望为每个标题和仅跟随该标题的项目复制 ReceiveDelivery 父节点。请帮忙。
感谢 Martin 提供的意见。
我正在使用 XSLT 2.0。这是我的代码
<xsl:stylesheet version="2.0" xmlns="http://schema.infor.com/InforOAGIS/2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xsl:output method="xml" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ReceiveDelivery">
<xsl:for-each-group select="*" group-starting-with="ReceiveDeliveryHeader">
<ReceiveDelivery>
<xsl:copy-of select="current-group()"/>
</ReceiveDelivery>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
这是应该的吗?但输出与输入相同。你能帮忙吗?
【问题讨论】:
-
你能说你是否可以使用 XSLT 2.0 或更高版本?谢谢!
标签: xslt