我有以下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>
我想提取&#34;高度&#34;和&#34;宽度&#34;每个&#34; Pared id&#34;的值并根据&#34;方向&#34;对它们进行排序。和&#34;角度&#34;值。例如,在&#34; Pared id =&#34; Pa-1&#34 ;,如果&#34; Direction&#34; = 0.000000和&#34; Angle&#34; = 90.000000,那么顺序提取的宽度和高度值应为:
(Width, 0.00)
(Width, Height)
(0.00, Height)
(0.00, 0.00)
我是XSLT的新手,我知道如何选择Width和Height的值:
<?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 =&#34; Pa-1:
(15.200000, 0.000000)
(15.200000, 3.657818)
(0.000000, 3.657818)
(0.000000, 0.000000)
从Pared id =&#34; Pa-2:
(0.000000, 0.000000)
(14.200000, 0.000000)
(14.200000, 2.598076)
(0.000000, 2.598076)
将其视为墙坐标X,Y。两个墙不能具有相同的坐标,高度和宽度的值就像坐标值一样。根据&#34;方向&#34;和#34;角度&#34;墙是这些坐标是如何配对的。 由于描述该墙的4个X,Y点,您有0.000个坐标值。因此,Pa-1和Pa-2不能具有相同的坐标,但它们可能在一个坐标处连接。如果有两个墙而不是形成L形,则0.00,0.00可以是Pa-1的右下坐标,但如果Pa-2,0的情况,0.00,0.00是左下坐标。
答案 0 :(得分:0)
不确定我是否理解正确。下面的XSL输出宽度和高度值,按Pared部分分组,按照Direction然后Angle(数字,升序)排序。
请注意,在您的XML示例中,我必须将一些gbXML
的属性与空格分开(否则它不是有效的XML)。
<?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)