XPath: "nur ganzes Wort (über die matches-Funktion mit der groß-und Kleinschreibung flag)
Verwendung von XPath, ich möchte "nur ganzes Wort" (option für Benutzer, genau wie in der VS-Suche).
Es scheint, als ob die Funktionen contains
und matches
arbeiten ähnlich, obwohl Spiele können für Fahnen wie i
für den Fall, Unempfindlichkeit.
In anderen Worten, ich bekomme die gleichen Ergebnisse mit diesen beiden XPath Abfragen:
<pets>
<dog name="Rupert" color="grey"/>
<dog name="Ralph" color="brown"/>
<cat name="Marvin the Cat" color="white"/>
<cat name="Garfield the Cat" color="orange"/>
<cat name="Cat" color="grey"/>
<cat name="Fluffy" color="black"/>
</pets>
Matches XPath: //cat[descendant-or-self::*[@*[matches(.,'Cat')]]]
returns:
<cat name="Marvin the Cat" color="white"/>
<cat name="Garfield the Cat" color="orange"/>
<cat name="Cat" color="grey"/>
Contains XPath: //cat[descendant-or-self::*[@*[contains(.,'Cat')]]]
returns:
<cat name="Marvin the Cat" color="white"/>
<cat name="Garfield the Cat" color="orange"/>
<cat name="Cat" color="grey"/>
Aber ich möchte matches
zurückzukehren Ergebnisse, die mit "Cat" nur ganze Wörter:
<cat name="Cat" color="grey"/>
Wie kann ich einstellen das der Abfrage entspricht, so entspricht es ganze Wort?
BEARBEITEN:
Ich vergaß zu erwähnen, dass ich brauche, um noch die matches-Funktion, da muss ich den Fall Unempfindlichkeit Flagge.
InformationsquelleAutor developer | 2012-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was über die Verwendung von
^
und$
Zeichen als Anker?Vom Die RegEx-Syntax in XQuery 1.0 und XPath 2.0:
Hinzugefügt einen link in eine Antwort, siehe "Zwei meta-Zeichen...".
Danke, ich muss noch ein paar Tests durchführen, aber das scheint, den trick zu tun!
InformationsquelleAutor Petr Janeček
Wäre diese Arbeit für Sie?
InformationsquelleAutor Oliver
Gibt es drei Funktionen/Operatoren von Bedeutung hier.
matches() einen regulären Ausdruck übereinstimmen; Sie können es verwenden, um einen Teilstring oder, um eine übereinstimmung mit dem gesamten string durch den Einsatz von Anker (^cat$), und Sie können festlegen, dass die 'i' - flag zu machen, Fall-blind.
contains() ist eine exakte Instanz eines substring; Sie können verwenden Sie das Dritte argument (Sortierung) auf Antrag einer Fall-blind Spiel, aber die Art und Weise, in der Sortierungen angegeben werden, hängt von der Prozessor Sie verwenden.
Eq-operator ist eine genaue übereinstimmung der gesamten Zeichenfolge; die "Standard-Sortierung" (die im Falle von XPath wird in der Regel eingestellt werden, mit der Prozessor-API) können verwendet werden, um die Anfrage groß-blind passenden. Dies scheint zu sein, die am nächsten ist, um Ihre Anforderung, der einzige Nachteil ist, dass die Angabe der Sortierung ist mehr system-abhängige als mit den "i" - flag mit matches().
InformationsquelleAutor Michael Kay
Es gibt verschiedene XPath-Ausdruck, geben Sie das gewünschte element:
Verwenden:
Oder-Nutzung:
XSLT - basierten Nachweis:
, wenn angewandt auf das XML-Dokument:
diese transformation wertet die beiden XPath-Ausdrücke und kopiert die ausgewählten Elemente, um den Ausgang:
InformationsquelleAutor Dimitre Novatchev
:
Ergebnisse in:
Ich überprüft mit Xacobeo.
Versuchen Sie dies:
//cat[translate(@*,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='cat']
Dies setzt Voraus, Sie übergeben immer die Zeichenfolge, die Sie anpassen möchten, indem Sie als Kleinbuchstaben.InformationsquelleAutor Joseph Victor Zammit