若xslt中父xml标记和子xml标记的名称相同,如何从源到目标保持相同的结构



以下是我的要求我有订单输入包含项目,每个项目都包含子项目,但标签名称是相同的"项目"。

<OrderInput>
<Item>
<ItemId>
<ItemName>
<ItemDesc>
<Item>
<ItemId>
<ItemName>
<ItemDesc>
<Item>
<ItemId>
<ItemName>
<ItemDesc>
</Item>
</Item>
</Item>
<Item>
<ItemId>
<ItemName>
<ItemDesc>
<Item>
<ItemId>
<ItemName>
<ItemDesc>
</Item>
</Item>
</OrderInput>

使用xslt进行转换后,它应该如下所示。父节点和子节点具有相同的名称"行",类似于源"项目">

<OrderOutput>
<OrderLine>
<Line>
<LineId>
<LineName>
<LineDesc>
<Line>
<LineId>
<LineName>
<LineDesc>
<Line>
<LineId>
<LineName>
<LineDesc>
</Line>
</Line>
</Line>
<Line>
<LineId>
<LineName>
<LineDesc>
<Line>
<LineId>
<LineName>
<LineDesc>
</Line>
</Line>
</OrderOutput>

请帮我解决这个问题。

您可以在转换时使用元素名称中的替换

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="OrderInput">
<OrderOutput>
<xsl:apply-templates/>
</OrderOutput>
</xsl:template>
<xsl:template match="*[starts-with(name(.), 'Item')]">
<xsl:element name="{replace(name(.), '^Item', 'Line')}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新