我是编写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>
答案 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>