使用通配符匹配xpath中的属性

时间:2012-07-09 10:19:45

标签: asp.net xpath

我正在开发基于.net 2.0的asp.net应用程序。

我在处理XML时遇到了一些问题。

假设我有这样的XML:

<person name="xxxyx" age="32" />

<person name="zzz" age="32" />

<person name="yyyxx" age="32" />

现在我要选择名称中包含yx

的人

如何使用xpath实现它?

我只知道这个表达式会匹配名字正好是“yx”的人:

"//person[name='yx'"]"

如何进行模糊搜索?

顺便说一下,有没有想过按照“名字”这样的指定属性对匹配的人进行排序?

2 个答案:

答案 0 :(得分:9)

与@Utkanos一样,建议//person[contains(@name, 'yx')]应与您想要的节点匹配。

至少在我所知的情况下,XPath本身并不具备能力,也不打算在节点上提供顺序,而是返回节点集,这些节点集是“没有重复的无序节点集合”(参见1和注释) 。但是在2.0版本中,我可能会对此2进行更改。

假设排序应该在XSL转换中完成,你可以使用<xsl:sort />这样:

<xsl:apply-templates select="//person[contains(@name, 'yx')]">
    <xsl:sort select="@name" />
</xsl:apply-templates>

此处记录的<xsl:sort />还有一些属性:http://www.w3.org/TR/xslt#sorting

答案 1 :(得分:8)

使用contains()功能。

//person[contains(@name, 'yx')]

此外,请注意@前面需要name,因为它是属性。

<强> Demo