Xml 如何根据元素条件对提取的值进行排序

Xml 如何根据元素条件对提取的值进行排序,xml,xslt,xslt-2.0,gbxml,Xml,Xslt,Xslt 2.0,Gbxml,我有以下XML文件: <?xml version="1.0" encoding="UTF-8"?> <gbXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gbxml.org/schema xsi.xsd"xmlns="http://www.gbxml.org/schema" temperatureUnit="C" lengthUnit="Meter

我有以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<gbXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.gbxml.org/schema xsi.xsd"xmlns="http://www.gbxml.org/schema"
 temperatureUnit="C" lengthUnit="Meters" areaUnit="SquareMeters"volumeUnit="CubicMeters"
useSIUnitsForResults="true" version="0.37">

<Pared id="Pa-1" paredType="Shade">     
<Name>P-S-1</Name>
<Order>
    <Direction>0.000000</Direction>
    <Angle>90.000000</Angle>
    <Height>3.657818</Height>
    <Width>15.200000</Width>
</Order>
</Pared>
<Pared id="Pa-2" paredType="Shade">     
    <Name>P-S-2</Name>
    <Order>
        <Direction>90.000000</Direction>
        <Angle>90.000000</Angle>
        <Height>2.598076</Height>
        <Width>14.200000</Width>
    </Order>
</Pared>
</gbXML>
我是XSLT新手,我知道如何使用以下选项选择宽度和高度值:

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

<xsl:template match= "gb:Pared">
<xsl:value-of select="gb:Order/gb:Height/>
从Pared id=“Pa-2:

将其视为墙坐标X,Y。两面墙不能具有相同的坐标,高度和宽度的值与坐标值相同。根据墙的“方向”和“角度”,这些坐标是如何配对的。
由于描述该墙的4个X,Y点,因此坐标值为0.000。因此,Pa-1和Pa-2不能具有相同的坐标,但它们可以在一个坐标处连接。例如,如果有两个墙形成L形,则0.00,0.00可以是Pa-1的右下坐标,但如果Pa-2的情况是,0.00,0.00是左下坐标内特。

不确定我是否理解正确。下面的XSL输出宽度和高度值,按Pared部分分组,按方向和角度排序(数字,升序)

请注意,在您的XML示例中,我必须用空格分隔
gbXML
的一些属性(否则它就是无效的XML)


感谢您的回复。是的,我只复制了XML文件的一部分,这就是原因。当我只有两个“Pared”元素时,您的代码可以工作。在完整的XML文件中,我有更多的“Pared”元素,其中一些元素具有相同的“Direction”和“Angle”值,但“Height”和“Width”不同“价值观。我没有把我所有的22个删减的元素都放进去,因为我认为理解我想要的东西会让人很困惑。您的代码帮助很大,因为我现在有了一个想法,只需要解决我前面提到的问题。再次感谢你!
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"   xmlns:gb="http://www.gbxml.org/schema">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">

<xsl:template match= "gb:Pared">
<xsl:value-of select="gb:Order/gb:Height/>
(15.200000, 0.000000)
(15.200000, 3.657818)
(0.000000, 3.657818)
(0.000000, 0.000000)
(0.000000, 0.000000)
(14.200000, 0.000000)
(14.200000, 2.598076)
(0.000000, 2.598076)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns:ns0="http://www.gbxml.org/schema">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:for-each select='//ns0:Pared' >
            <xsl:sort select=".//ns0:Direction" data-type='number' order="ascending"/>
            <xsl:sort select=".//ns0:Angle"     data-type='number' order="ascending"/>
-- Pared: <xsl:value-of select="@id" />
(<xsl:value-of select=".//ns0:Width" />,0.00)
(<xsl:value-of select=".//ns0:Width" />,<xsl:value-of select=".//ns0:Height" />)
(0.00,<xsl:value-of select=".//ns0:Height" />)
(0.00,0.00)
</xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
-- Pared: Pa-1
(15.200000,0.00)
(15.200000,3.657818)
(0.00,3.657818)
(0.00,0.00)

-- Pared: Pa-2
(14.200000,0.00)
(14.200000,2.598076)
(0.00,2.598076)
(0.00,0.00)