XQuery sucht nach einem Text mit einem einzelnen Zitat

8

Ich kann nicht herausfinden, wie Sie mit XPATHs nach einem Text suchen, der einfache Anführungszeichen enthält.

Zum Beispiel habe ich dem Titel dieser Frage ein Zitat hinzugefügt. Die folgende Zeile

%Vor%

Gibt ein leeres Array zurück.

Wenn ich jedoch folgendes versuche

%Vor%

Es gibt zwar den Link für den Titel der Seite zurück, aber ich möchte dort sowohl einfache als auch doppelte Anführungszeichen akzeptieren, also kann ich nicht einfach nur das einfache / doppelte Anführungszeichen verwenden.

>

Sie können es in der Chrome- oder Firebug-Konsole auf dieser Seite ausprobieren.

    
Juan Mendes 20.11.2012, 21:20
quelle

6 Antworten

11

Hier ist ein Hackaround (Danke Dimitre Novatchev), der es mir erlaubt, nach Text in XPaths zu suchen, egal ob er einfache oder doppelte Anführungszeichen enthält. Implementiert in JS, könnte aber leicht in andere Sprachen übersetzt werden

%Vor%

Wenn ich nach I'm reading "Harry Potter" suche, könnte ich Folgendes tun:

%Vor%

Hier ist eine (viel kürzere) Java-Version. Es ist genau dasselbe wie JavaScript, wenn Sie Typinformationen entfernen. Danke an Ссылка

%Vor%     
Juan Mendes 20.11.2012, 22:44
quelle
5

In XPath 2.0 und XQuery 1.0 kann das Trennzeichen eines Zeichenfolgenliterals in das Zeichenfolgenliteral eingefügt werden, indem es verdoppelt wird:

%Vor%

oder

%Vor%

Die Konvention ist von SQL entlehnt.

    
Michael Kay 21.11.2012 14:01
quelle
4

Dies ist ein Beispiel :

%Vor%

Wenn dieser XPath-Ausdruck auf das folgende XML-Dokument angewendet wird:

%Vor%

Das gewünschte, korrekte Ergebnis (ein einzelner Textknoten) ist ausgewählt:

%Vor%

Hier ist eine Verifizierung mit dem XPath Visualizer (Ein kostenloses und Open-Source-Tool, das ich vor 12 Jahren entwickelt habe und XPath den spaßigen Weg zu Tausenden von Menschen beigebracht hat:

Ihr Problem kann darin bestehen, dass Sie diesen XPath-Ausdruck nicht als Zeichenfolge in der von Ihnen verwendeten Programmiersprache angeben können - dies ist kein XPath-Problem, sondern ein Problem in Ihrem Wissen über Ihre Programmiersprache.

>     
Dimitre Novatchev 20.11.2012 21:37
quelle
1

Wenn Sie XQuery anstelle von XPath verwenden, können Sie auch, wie der Titel sagt, die XML-Entitäten verwenden:

%Vor%

sie arbeiten auch in einfachen Anführungszeichen

    
BeniBela 21.11.2012 14:53
quelle
1

Sie können dies mit einem regulären Ausdruck tun. Zum Beispiel (als ES6-Code):

%Vor%

Dies ersetzt alle ' in der Eingabezeichenfolge durch ', "'", ' .

Das letzte , '' ist wichtig, weil concat('string') ein Fehler ist.

    
Danielle Madeley 09.09.2015 06:48
quelle
0

Nun, ich war in derselben Quest und nach einem Moment fand ich, dass es keine Unterstützung in XPath dafür gibt, ruhig enttäuschend! Aber gut, wir können immer daran arbeiten!

Ich wollte etwas Einfaches und Schnelles. Mit setze ich einen eigenen Ersatz für den Apostroph ein , einen eindeutigen Code (etwas, dem du in deinem XML-Text nicht begegnen wirst), Ich habe // apos // zum Beispiel. Jetzt setzen Sie das sowohl in Ihren xml-Text als auch in Ihre xpath-Abfrage . (Im Fall von XML, das Sie nicht immer geschrieben haben, können wir die Ersetzungsfunktion eines Editors ersetzen). Und jetzt, wie wir es machen? Wir suchen normal damit, holen das Ergebnis und ersetzen das // apos // durch '.

Beziehen Sie einige Beispiele von dem, was ich tat: (replace_special_char_xpath () ist, was Sie machen müssen)

%Vor%

der Text in der XML-Datei:

%Vor%

und der Aufruf in der PHP-Datei (generierte HTML):

%Vor%     
Allal Mohamed 24.05.2017 13:37
quelle

Tags und Links