Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSL查找键为同级的节点_Xml_Xslt_Xslt 1.0_Muenchian Grouping - Fatal编程技术网

Xml XSL查找键为同级的节点

Xml XSL查找键为同级的节点,xml,xslt,xslt-1.0,muenchian-grouping,Xml,Xslt,Xslt 1.0,Muenchian Grouping,我有这个(非常奇怪的)XML,有来自4个家庭的7个孩子。 有5个男孩有6个苹果和9个桔子,2个女孩有3个苹果和3个桔子 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="fruits.xsl"?> <report> <family> <gender> <boyorgirl>

我有这个(非常奇怪的)XML,有来自4个家庭的7个孩子。 有5个男孩有6个苹果和9个桔子,2个女孩有3个苹果和3个桔子

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="fruits.xsl"?>
<report>
    <family>
        <gender>
            <boyorgirl>Boy</boyorgirl>
                <person>
                    <apples>1</apples>
                    <oranges>1</oranges>
                    <id>1</id>
                </person>
        </gender>
        <gender>
            <boyorgirl>Girl</boyorgirl>
                <person>
                    <apples>2</apples>
                    <oranges>0</oranges>
                    <id>2</id>
                </person>
        </gender>
        <gender>
            <boyorgirl>Boy</boyorgirl>
                <person>
                    <apples>1</apples>
                    <oranges>4</oranges>
                    <id>3</id>
                </person>
        </gender>
    </family>
    <family>
        <gender>
            <boyorgirl>Girl</boyorgirl>
                <person>
                    <apples>1</apples>
                    <oranges>3</oranges>
                    <id>4</id>
                </person>
        </gender>
    </family>
    <family>
        <gender>
            <boyorgirl>Boy</boyorgirl>
                <person>
                    <apples>1</apples>
                    <oranges>0</oranges>
                    <id>5</id>
                </person>
        </gender>
    </family>
    <family>
        <gender>
            <boyorgirl>Boy</boyorgirl>
                <person>
                    <apples>2</apples>
                    <oranges>2</oranges>
                    <id>6</id>
                </person>
                <person>
                    <apples>1</apples>
                    <oranges>2</oranges>
                    <id>7</id>
                </person>
        </gender>
    </family>
</report>

男孩
1.
1.
1.
姑娘
2.
0
2.
男孩
1.
4.
3.
姑娘
1.
3.
4.
男孩
1.
0
5.
男孩
2.
2.
6.
1.
2.
7.
我想数一数每个性别有多少人,他们一起有多少苹果和桔子。 我不想在那个些现代社会对性别进行硬编码,以防有人声称他们的性别不同于男孩或女孩。预期产量为

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<fruitcounting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <fruitline>
        <boyorgirl>Boy</boyorgirl>
        <numberOfPersons>5</numberOfPersons>
        <apples>6</apples>
        <oranges>9</oranges>
    </fruitline>
    <fruitline>
        <boyorgirl>Girl</boyorgirl>
        <numberOfPersons>2</numberOfPersons>
        <apples>3</apples>
        <oranges>3</oranges>
    </fruitline>
</fruitcounting>

男孩
5.
6.
9
姑娘
2.
3.
3.
我有一个样式表的开头,但它只计算第一个家庭中的成员和果实-我如何更改它,使它可以查找所有男孩/女孩,而不考虑家庭?或者,我想我可以把它表述为所有节点,它们的键都是前面的兄弟节点

我只能使用没有扩展的XSL 1.0

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="fruits" match="gender" use="boyorgirl"/>

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

        <xsl:for-each select="//gender[generate-id(.)=generate-id(key('fruits', boyorgirl)[1])]">

            <fruitline>
                <boyorgirl><xsl:value-of select="boyorgirl"/></boyorgirl>
                <numberOfPersons><xsl:value-of select="count(../gender/person/id)"/></numberOfPersons>
                <apples><xsl:value-of select="sum(../gender/person/apples)"/></apples>
                <oranges><xsl:value-of select="sum(../gender/person/oranges)"/></oranges>

            </fruitline>

        </xsl:for-each>
    </fruitcounting>
</xsl:template>

</xsl:stylesheet>

您可以将
替换为
,并以相同的方式使用
功能来识别您的组,例如

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="fruits" match="gender" use="boyorgirl"/>

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

        <xsl:for-each select="//gender[generate-id(.)=generate-id(key('fruits', boyorgirl)[1])]">

            <fruitline>
                <boyorgirl><xsl:value-of select="boyorgirl"/></boyorgirl>
                <numberOfPersons><xsl:value-of select="count(key('fruits', boyorgirl)/person)"/></numberOfPersons>
                <apples><xsl:value-of select="sum(key('fruits', boyorgirl)/person/apples)"/></apples>
                <oranges><xsl:value-of select="sum(key('fruits', boyorgirl)/person/oranges)"/></oranges>

            </fruitline>

        </xsl:for-each>
    </fruitcounting>
</xsl:template>

</xsl:stylesheet>