2

こんにちは、私は XSLT にかなり慣れていないので、簡単な XSL コードについて助けが必要です。

私の入力 XML

<?xml version="1.0" encoding="ASCII"?>
<Node Name="Person"  Received="1"  Good="1" Bad="0"  Condition="byPerson:1111">
</Node>
<Node Name="Person"  Received="1"  Good="1" Bad="0"  Condition="byPerson:1111">
</Node>
<Node Name="Person"  Received="1"  Good="1" Bad="0"  Condition="byPerson:2222">
</Node>
<Node Name="Person"  Received="1"  Good="1" Bad="0"  Condition="byPerson:2222">
</Node>
<Node Name="Person"  Received="1"  Good="1" Bad="0"  Condition="byPerson:3333">
</Node>

そして、すべての Received 、 good 、および Bad の合計として結果を期待していますが、一意の条件ごとに 1 回だけ追加する必要があります。

このようなもの

<?xml version="1.0" encoding="ASCII"?>
<Received>3</Received >
<Good>3</Good>
<Bad>0</Bad>

私は以下のコードを試していましたが、これまでのところすべての合計を取得するだけでは成功していません。各「条件」の合計を一度だけ取得したいと考えています。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">


<xsl:template match="/">


<xsl:value-of select= "sum(Node@Received)"/>
<xsl:value-of select= "sum(Node/@Good)"/>
<xsl:value-of select= "sum(Node/@Bad)"/>  


</xsl:template> 

4

2 に答える 2

1

次のスタイルシートでは、 を使用して、 の値で要素xsl:keyをグループ化しています。Meunchien メソッドとを使用して、一意の各要素の最初の要素を選択し、選択した要素の属性の を生成します。<node>@Conditionkey()generate-id()node@Conditionsum()node

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output indent="yes"/>

    <xsl:key name="nodesByCondition" match="Node" use="@Condition"/>

    <xsl:template match="/">
        <results>

            <xsl:variable name="distinctNodes" 
                select="*/Node[generate-id() = 
                generate-id(key('nodesByCondition', @Condition)[1])]"/>

            <Received>
                <xsl:value-of select= "sum($distinctNodes/@Received)"/>
            </Received>
            <Good><xsl:value-of select= "sum($distinctNodes/@Good)"/></Good>
            <Bad><xsl:value-of select= "sum($distinctNodes/@Bad)"/></Bad>                
        </results>
    </xsl:template> 
</xsl:stylesheet>
于 2013-05-22T02:34:40.940 に答える