我有下面的示例xml表,我想获得下面样式表的transitLine
,transitRoute
和stop
元素的所有属性,但输出错误。
sample.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE transitSchedule SYSTEM "http://www.matsim.org/files/dtd/transitSchedule_v1.dtd">
<transitSchedule>
<transitStops>
<stopFacility id="1" x="-53196.450154726146" y="-3755010.0058102254" />
<stopFacility id="1.1" x="-53196.450154726146" y="-3755010.0058102254" />
<stopFacility id="1.2" x="-53196.450154726146" y="-3755010.0058102254" />
</transitStops>
<transitLine id="1001">
<transitRoute id="1001_0">
<transportMode>bus</transportMode>
<routeProfile>
<stop refId="180" Offset="00:00:00"/>
<stop refId="58" Offset="00:03:00"/>
<stop refId="152" Offset="00:05:00"/>
</routeProfile>
</transitRoute>
<transitRoute id="1001_1">
<transportMode>bus</transportMode>
<routeProfile>
<stop refId="190" Offset="00:00:00"/>
<stop refId="58" Offset="00:03:00" />
<stop refId="153" Offset="00:05:00"/>
</routeProfile>
</transitRoute>
</transitLine>
<transitLine id="10011">
<transitRoute id="10011_0">
<transportMode>bus</transportMode>
<routeProfile>
<stop refId="29.2" Offset="00:00:00" />
<stop refId="202" Offset="00:04:00" />
<stop refId="113" Offset="00:07:00" />
</routeProfile>
</transitRoute>
<transitRoute id="10011_1">
<transportMode>bus</transportMode>
<routeProfile>
<stop refId="29.2" Offset="00:00:00" />
<stop refId="191" Offset="00:04:00" />
<stop refId="187" Offset="00:07:00" />
</routeProfile>
</transitRoute>
</transitLine>
</transitSchedule>
style.xsl
<xsl:template match="/">
transitLine,transitRoute,routeProfile,links
<xsl:for-each select="//transitLine">
<xsl:value-of select="concat(@id,'
')"/>
<xsl:for-each select="//transitRoute">
<xsl:value-of select="concat(',',@id,'
')"/>
</xsl:for-each>
<xsl:for-each select="//stop">
<xsl:value-of select="concat(',',@refId,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当前输出:
transitLine transitRoute routeProfile
1001
1001_0
1001_1
10011_0
10011_1
10011
1001_0
1001_1
10011_0
10011_1
预期产出:
transitLine" transitRoute routeProfile
1001"
1001_0
180
58
152
1001_1
90
10011 58
153
1001_0
29.2
202
113
1001_1
292
191
187
答案 0 :(得分:1)
您的脚本始终失败的主要原因(每个for-each
loop)获取特定名称的所有标签(来自整个源文件)。
这&#34;采取所有&#34;方法只适用于最外层的循环。 对于嵌套循环,您应该只使用当前元素的子元素。
该脚本应包含三个越来越嵌套的循环:
transitLine
元素。transitRoute
的子transitLine
元素。stop
的{{1}}元素。
但是这次 XPath 表达式应该包含transitRoute
,
因为.//
元素不是当前stop
的直接子元素。最后一件事:印刷文字没有必要的前导空格, 但包括不必要的逗号。
因此整个脚本应如下所示:
transitRoute
它提供了所需的输出。