У меня есть XML как это:
<Entity>
<Type>1</Type>
<Number>111</Number>
<GroupList>
<Group>
<Id>1001</Id>
<FieldsList>
<Field>
<Name>foo</Name>
<Value>123</Value>
<Type>String</Type>
</Polje>
</FieldList>
</Group>
<Group>
<Id>1002</Id>
<FieldsList>
<Field>
<Name>bar</Name>
<Value>456</Value>
<Type>String</Type>
</Field>
</Field>
</Group>
</GroupList>
</Entity>
Через XSLT-преобразование я хочу добиться этого:
<Entity>
<Type>1</Type>
<Number>111</Number>
<GroupList>1001:foo,123,String;1002:bar,456,String</GroupList>
</Entity>
Когда я использую это преобразование
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Field">
<xsl:copy>
<xsl:value-of select=
"concat(Name,',',Value,',',Type)
"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Group">
<xsl:copy>
<xsl:value-of select=
"concat(Id, ': ',FieldsList, ';')
"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Я получаю результат, подобный следующему:
<Entity>
<Type>1</Type>
<Number>111</Number>
<GroupList>
<Group>1001: foo123String;</Group>
<Group>1002: bar456String;</Group>
</GroupList>
</Entity>
Можно ли в любом случае использовать два разных шаблона для объединения на разных уровнях узлов?