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

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -