2012-07-09 70 views
8

我正在研究基於.net 2.0的asp.net應用程序。使用通配符匹配xpath中的屬性

我在處理XML時遇到了一些問題。

假設我有這樣的XML:

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

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

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

現在我想選擇其名稱中包含yx

如何使用XPath來實現它的人?

我只知道這個表達式將匹配的名字正是「YX」的人:

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

如何使模糊搜索?

順便說一句,任何想法按指定的屬性,如「名稱」排序匹配的人?

+0

應如何排序完成,不這是指XSL轉換? – hielsnoppe 2012-07-09 11:09:33

+0

我從來沒有使用過xsl。 – hguser 2012-07-09 11:31:53

+0

這應該有所幫助:http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 – 2012-07-09 18:02:58

回答

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

+2

在XPath 2.0(事實上是3.0)中,獨立的XPath沒有排序功能,它依然如此 - 你需要去到XSLT或XQuery。 – 2012-07-09 13:09:35

8

使用函數。

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

此外,請注意你需要@name前面,因爲它的屬性。

Demo