Xml 对每个参数使用XSL?
我正在尝试对我所在城市的所有公交线路和公交站点的XML文档进行XSL转换。在这样做的过程中,我使用for-each-select来选择包含作为参数传递的路由号的所有站点节点 当我运行我的程序时,似乎没有一个值被选中,我想知道我的语法是否无效,或者您是否可以在xsl:for每个select语句中使用参数 以下是我的xsl:Xml 对每个参数使用XSL?,xml,xslt,Xml,Xslt,我正在尝试对我所在城市的所有公交线路和公交站点的XML文档进行XSL转换。在这样做的过程中,我使用for-each-select来选择包含作为参数传递的路由号的所有站点节点 当我运行我的程序时,似乎没有一个值被选中,我想知道我的语法是否无效,或者您是否可以在xsl:for每个select语句中使用参数 以下是我的xsl: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="route_num"></xsl:param>
<xsl:param name="num_stops" />
<xsl:template match="/">
<!-- ... -->
<xsl:for-each select="allstops/stop[contains(routes,$route_num)]">
<xsl:sort select="@number"/>
<tr>
<td><xsl:value-of select="@number"/></td>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="location/latitude"/></td>
<td><xsl:value-of select="location/longitude"/></td>
<td><xsl:value-of select="routes"/></td>
</tr>
</xsl:for-each>
<!-- ... -->
</xsl:template>
</xsl:stylesheet>
下面是XML的一个示例:
<stop number="20" name="Adelaide & Ada NB">
<location>
<latitude>42.9742886</latitude>
<longitude>-81.2252341</longitude>
</location>
<routes>16</routes>
</stop>
假设一个XML节点包含一个16的路由,它应该遍历所有节点并将数据拉入我设置的字段,除非我的语法与XSL错误,不是吗
编辑:routes标签可以包含多个路线编号,这就是我一直使用contains的原因:
<stop number="408" name="Clarence & King St NB">
<location>
<latitude>42.9835093</latitude>
<longitude>-81.2471596</longitude>
</location>
<routes>05, 09, 12, 19, 23</routes>
</stop>
编辑2:XML没有名称空间。包含函数使用字符串,而不是节点。这里需要的是一个简单的节点集比较:
<xsl:for-each select="allstops/stop[routes=$route_num]">
contains是一个字符串函数,即“foo”包含“o”。你用错了,你可能需要allstops/stop[routes=$route\u num]
除此之外-是的,可以在XPath表达式中使用参数值或变量,将使用XPath返回的任何内容
仅从您的示例无法判断XPath中的错误在哪里。重新构建表达式,试图找出它失败的地方。有些站点有多条路线通过它们,因此routes标签可能看起来像16,31,42@AaronG. 那么它应该看起来像163142。这里有XML,所以不要像CSV文件一样使用它。这不是我的XML文件,它是伦敦市交通委员会生成的XML文件。我只是在解释它,并试图对其使用XSLT。@Arong。请再次编辑您的问题,并包含多条路线的确切示例。@Arong。不要忘记包含XML可能具有的任何名称空间。如果有任何机会更改路由,则可以使用逗号分隔的列表部分,然后无论如何更改它。如果你坚持使用它,至少使用一些避免误报的东西,例如6也匹配16:ContainesConcat',',translateroutes',',',',contcat',',$route_num','。是的,这很难看,但这是错误使用XML的直接后果。除了上面Tomalak解释的潜在误报问题之外,没有理由说明select语句不起作用。也就是说,从您发布的部分代码中看不到任何原因。你检查过参数是否成功地传递到样式表了吗?基本上就是这样。正在用C编写到WebBrowser控件的XSLT转换。似乎它甚至没有用select语句输入for-each。这可能是模板匹配吗?这一定与我编写WebBrowser控件有关,因为它完全跳过了XSLT中的xsl:for-each。