我正在尝试将源XML格式化为目标格式,如下所示。但这没有按预期工作。
“ AttributeName ”的值应成为目标xml中的元素名称,而元素“ AttributeValue ”的值应成为该值。源和目标样本XMLS在下面给出,如何使用XSLT实现?
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet4>
<Record4>
<FulfillmentID>49</FulfillmentID>
<LineID>324</LineID>
<OrderID>2109006</OrderID>
<AttributeName>LAST_EXTRACT_NUMBER</AttributeName>
<AttributeValue>test64565</AttributeValue>
</Record4>
<Record4>
<FulfillmentID>49</FulfillmentID>
<LineID>324</LineID>
<AttributeName>LAST_EXTRACT_NUMBER</AttributeName>
<AttributeValue>test64565</AttributeValue>
</Record4>
</ResultSet4>
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet4>
<Record4>
<FulfillmentID>49</FulfillmentID>
<LineID>324</LineID>
<OrderID>2109006</OrderID>
<Line bridged >test12 </Line bridged >
</Record4>
<Record4>
<FulfillmentID>50</FulfillmentID>
<LineID>324</LineID>
<OrderID>2109006</OrderID>
<LAST_EXTRACT_NUMBER>test64565</LAST_EXTRACT_NUMBER>
</Record4>
</ResultSet4>
其中的标记
<AttributeName>LAST_EXTRACT_NUMBER</AttributeName> and
<AttributeValue>test64565</AttributeValue>
应转换为一个标签 喜欢:
<Line bridged >test12 </Line bridged >
。
答案 0 :(得分:1)
“ AttributeName”的值应成为目标xml中的元素名称,而元素“ AttributeValue”的值应成为该值。
这是可以完成此操作的一种方法:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AttributeName">
<xsl:element name="{.}">
<xsl:value-of select="following-sibling::AttributeValue"/>
</xsl:element>
</xsl:template>
<xsl:template match="AttributeValue"/>
</xsl:stylesheet>
结果与您的问题中显示的结果不同,但我认为这是问题的缺陷而不是答案的缺陷。
请注意,这假设AttributeName
将始终包含有效的XML元素名称。