用于重复标记的xml到xml转换

时间:2017-04-14 07:31:00

标签: xml xslt

我是编写XSL的新手。我熟悉10年前使用DOM解析器处理XML,但技术发生了变化。我想我仍然可以使用Java DOM解析器完成这项工作,但它将成为系统的开销。

我有以下格式的源XML。标签'价值'事件是可变的。我需要将其转换为第二种xml格式。

XML来源:

  <Part>
     <PartNumber>XYZ</PartNumber>
     <ProductLines>
        <Value>P58</Value>
        <Value>P84</Value>
        <Value>P88</Value>
        <Value>P99</Value>
     </ProductLines>
    </Part>

XML目标

    <Part>
     <PartNumber>XYZ</PartNumber>
     <ProductLines>P58,P84,P88,P99</ProductLines>
    </Part>

我正在尝试使用以下XSL,而不是工作:需要XML专家的建议。

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="1.0">
        <xsl:output method="xml"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"></xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
        <xsl:template match="ProductLines">
            <xsl:for-each select="Value">
                <xsl:value-of select="."></xsl:value-of> 
            </xsl:for-each>
        </xsl:template>
        <xsl:template match="ProductLines/node()"/>
    </xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

您可以使用类似的东西来连接值:

<xsl:variable name="concatenated_value">
    <xsl:for-each select="Value">
        <xsl:value-of select="."/>
        <xsl:if test="position() != last()">
            <xsl:value-of select="','"/>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>