Ich führe eine Suche in einer XML-Datei mit dem folgenden Code durch:
%Vor%Dabei ist $ query die Suchanfrage und StopName der Name einer Bushaltestelle. Das Problem ist, dass die Groß- / Kleinschreibung beachtet wird.
Und nicht nur das, ich würde auch in der Lage sein, mit nicht-englischen Zeichen wie ÆØÅæøå nach norwegischen Namen zu suchen.
Wie ist das möglich?
In XPath 1.0 (das ist meiner Meinung nach das Beste, was Sie mit PHP SimpleXML erreichen können) müssten Sie die translate()
-Funktion verwenden, um Kleinbuchstaben aus gemischten Groß- und Kleinbuchstaben zu erzeugen.
Aus praktischen Gründen würde ich es in eine Funktion wie diese einfügen:
%Vor% Als Hygienisierungsmaßnahme würde ich einzelne Anführungszeichen in $query
entweder ganz verbieten oder umgehen, da sie Ihre XPath-Zeichenfolge unterbrechen, wenn sie ignoriert werden.
In XPath 2.0 können Sie die Funktion lower-case()
verwenden, bei der es sich um Unicode handelt bewusst, so wird es nicht-ASCII-Zeichen gut umgehen.
Um auf XPath 2.0 zugreifen zu können, benötigen Sie den XSLT 2.0 Parser. Zum Beispiel SAXON . Sie können von PHP über JavaBridge zugreifen.
Nicht-englische Namen sollten kein Problem sein. Fügen Sie sie einfach Ihrem XPath hinzu. (XML ist definiert als Unicode).
Wie bei der Groß- / Kleinschreibung, ...
XPath 1.0 enthält die folgende Anweisung :
Zwei Strings sind genau dann gleich, wenn sie aus der gleichen Folge von BKS-Zeichen bestehen.
Selbst die Verwendung expliziter Vergleichselemente für den lokalen Namen wird nicht helfen.
XPath 2 enthält Funktionen zum Zuordnen von Groß- und Kleinschreibung. Z.B. fn: Großbuchstabe
Zusätzlich: Die Verwendung der XPATH-Übersetzungsfunktion sollte es ermöglichen, die Fallzuordnung in XPath 1 zu fälschen, aber die Eingabe muss jeden verdeckten Codepunkt enthalten, den Sie und Ihre Benutzer jemals benötigen:
%Vor%Zusätzlich:
$ xml- & gt; xpath ("// StopPoint [enthält (StopName, '$ query')]");
Sie müssen alle Apostroph-Zeichen aus $ query ausstreichen, um zu vermeiden, dass Sie den Ausdruck unterbrechen.
In XPath 2.0 können Sie das im Trennzeichen verwendete Anführungszeichen verdoppeln, um dieses Anführungszeichen in ein Zeichenfolgenliteral einzufügen. In XPath 1.0 ist es jedoch unmöglich, das Trennzeichen in die Zeichenfolge einzufügen.