2012-07-09 13 views
8

Pracuję nad aplikacją asp.net opartą na .net 2.0.użyj symbolu wieloznacznego do dopasowania atrybutu w ścieżce xpath

I napotykam pewne problemy podczas przetwarzania XML.

Załóżmy, że mam XML tak:

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

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

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

teraz chcę, aby wybrać osobę, której nazwa zawiera yx

Jak używać XPath do jego realizacji?

Wiem tylko to wyrażenie będzie pasować do osoby, której nazwisko jest dokładnie „yx”:

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

Jak zrobić rozmyty wyszukiwania?

BTW, pomysł na posortowanie dopasowanej osoby według określonego atrybutu, np. "Nazwa"?

+0

Jak sortowanie być zrobione, nie to dotyczy transformacji XSL? – hielsnoppe

+0

Nigdy nie użyłem xsl. – hguser

+0

To powinno pomóc: http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 –

Odpowiedz

9

Podobny @Utkanos zasugerował, że //person[contains(@name, 'yx')] powinien odpowiadać wybranym węzłom.

Sam XPath jest, przynajmniej według mojej wiedzy, niezdolny i nie ma na celu zapewnienia porządku na węzłach, ale zamiast tego zwraca zestawy węzłów, które są "nieuporządkowanym zbieraniem węzłów bez duplikatów" (patrz 1 i komentarze). Jednak w wersji 2.0 mogą istnieć zmiany w tym 2, z którymi nie jestem zaznajomiony.

Zakładając sortowanie powinno odbywać się w transformacji XSL można użyć <xsl:sort /> takiego:

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

Istnieje kilka atrybuty na <xsl:sort /> udokumentowane tutaj: http://www.w3.org/TR/xslt#sorting

+2

Pozostaje prawdą w XPath 2.0 (a nawet 3.0), że samodzielny XPath nie ma możliwości sortowania - musisz iść do XSLT lub XQuery. –

8

Użyj funkcji .

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

również pamiętać trzeba @ przed name ponieważ jest atrybutem.

Demo.

Powiązane problemy