xslt - Some outpost result using two condition -
i have transform xml file should check field id '0', field id '1' , sum field id '2'. example have:
<document> <line id="0"> <field id="0">mar</field> <field id="1">doc1</field> <field id="2">2</field> </line> <line id="1"> <field id="0">mar</field> <field id="1">doc2</field> <field id="2">3</field> </line> <line id="2"> <field id="0">aaa></field> <field id="1">doc4</field> </line> <line id="3"> <field id="0">mar</field> <field id="1">doc1</field> <field id="2">4</field> </line> </document>
result should be:
<type-mar> <document>doc1</document> <sum>6</sum> </type-mar> <type-mar> <document>doc2</document> <sum>3</sum> </type-mar>
there should take mar lines, , show results depends of field id '1'.
my idea was, first off cycle(for each) , use condition(when). maybe offer more omptimal decision.
i add new note, how check if data comes that:
<field id="0">mar999</field> <field id="1">doc1-1231</field>
first field try use function contains 'mar', others substring-before '-'. stuck when try use on yours program. maybe can take advice it?
this transformation:
<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:key name="klinebyid0id1" match="line[field[@id=2]]" use="concat(field[@id=0],'+',field[@id=1])"/> <xsl:template match= "line[field[@id=2] , generate-id() = generate-id(key('klinebyid0id1', concat(field[@id=0], '+',field[@id=1]) )[1]) ] "> <xsl:element name="type-{field[@id=0]}"> <document> <xsl:value-of select="field[@id=1]"/> </document> <sum> <xsl:value-of select= "sum(key('klinebyid0id1', concat(field[@id=0], '+',field[@id=1]) ) /field[@id=2] ) "/> </sum> </xsl:element> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
when applied on provided xml document:
<document> <line id="0"> <field id="0">mar</field> <field id="1">doc1</field> <field id="2">2</field> </line> <line id="1"> <field id="0">mar</field> <field id="1">doc2</field> <field id="2">3</field> </line> <line id="2"> <field id="0">aaa></field> <field id="1">doc4</field> </line> <line id="3"> <field id="0">mar</field> <field id="1">doc1</field> <field id="2">4</field> </line> </document>
produces wanted, correct result:
<type-mar> <document>doc1</document> <sum>6</sum> </type-mar> <type-mar> <document>doc2</document> <sum>3</sum> </type-mar>
explanation: muenchian method grouping used key defined concatenation of 2 elements.
Comments
Post a Comment