2012-07-09 12 views
8

Ich arbeite an einer Asp.net-Anwendung basierend auf .net 2.0.Verwenden Sie Wildcard, um Attribut in XPath

Und ich treffe einige Probleme, wenn ich die XML verarbeiten.

Angenommen, ich habe XML wie folgt aus:

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

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

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

Jetzt möchte ich die Person wählen, dessen Name yx

Wie verwende ich XPath es umsetzen?

ich diesen Ausdruck nur wissen, die Person, deren Name passen genau "yx":

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

Wie die Fuzzy-Suche machen?

BTW, eine Idee, die übereinstimmende Person durch das angegebene Attribut wie "Name" zu sortieren?

+0

Wie sollte die Sortierung erfolgen, tut Dies bezieht sich auf eine XSL-Transformation? – hielsnoppe

+0

Ich habe noch nie xsl verwendet. – hguser

+0

Dies sollte helfen: http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 –

Antwort

9

Wie @Utkanos vorgeschlagen //person[contains(@name, 'yx')] sollte die Knoten übereinstimmen, die Sie möchten.

XPath selbst ist, zumindest nach meinem Wissen, nicht in der Lage und nicht dazu bestimmt, eine Ordnung auf Knoten zu liefern, sondern gibt Node-Sets zurück, die "ungeordnete Sammlung von Knoten ohne Duplikate" sind (siehe 1 und Kommentare). In der Version 2.0 könnte es jedoch Änderungen geben, die ich nicht kenne.

die Sortierung Unter der Annahme, sollte in einer XSL-Transformation durchgeführt werden Sie <xsl:sort /> wie diese verwenden:

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

Es gibt einige weitere Attribute auf <xsl:sort /> hier dokumentiert: http://www.w3.org/TR/xslt#sorting

+2

Es bleibt in XPath 2.0 (und in der Tat 3.0) wahr, dass eigenständige XPath keine Sortierfunktion hat - Sie müssen gehen zu XSLT oder XQuery. –

8

Verwenden Sie die -Funktion.

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

Beachten Sie auch, Sie @ vor name müssen, da es sich um ein Attribut ist.

Demo.