以下是我的要求 我有订单输入包含项目,每个项目包含子项目,但标签名称是相同的“项目”。
<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进行转换后,它应如下所示。父级和chils节点具有相同的名称“Line”,如源“Item”
<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>
请帮我解决这个问题。
答案 0 :(得分:1)
您可以在转换时使用元素名称中的替换
<?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>