名称值对的XSLT转换

时间:2019-01-24 12:41:18

标签: xslt

我正在尝试将源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 >

1 个答案:

答案 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元素名称。