Zum Beispiel für die folgende XML
<CATALOG>
<CD title="Empire Burlesque"/>
<CD title="empire burlesque"/>
<CD title="EMPIRE BURLESQUE"/>
<CD title="EmPiRe BuRLeSQuE"/>
<CD title="Others"/>
<CATALOG>
Wie man die ersten 4 Datensätze mit xpath like vergleicht //CD[@title='empire burlesque']
. Gibt es dafür eine xpath-Funktion? Andere Lösungen wie die PHP-Funktion werden ebenfalls akzeptiert.
Antworten:
XPath 2 verfügt über eine Zeichenfolgenfunktion in Kleinbuchstaben (und Großbuchstaben). Das ist nicht ganz das Gleiche wie ohne Berücksichtigung der Groß- und Kleinschreibung, aber hoffentlich ist es nah genug:
Wenn Sie XPath 1 verwenden, gibt es einen Hack mit translate .
quelle
match () ist eine XPATH 2.0-Funktion, die eine Regex-Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung ermöglicht.
Eines der Flags dient
i
zum Abgleichen ohne Berücksichtigung der Groß- und Kleinschreibung.Der folgende XPATH verwendet die Funktion match () mit dem Flag ohne Berücksichtigung der Groß- und Kleinschreibung:
quelle
Dies funktioniert in Chrome Developer-Tools nicht, um ein Element zu finden. Ich suche nach der Schaltfläche "Senden" auf dem Bildschirm
Verwenden Sie jedoch "Übersetzen", um alle Kappen durch kleine Werke wie unten zu ersetzen
Update: Ich habe gerade den Grund gefunden, warum "Übereinstimmungen" nicht funktionieren. Ich verwende Chrome mit xpath 1.0, das die Syntax "Übereinstimmungen" nicht versteht. Es sollte xpath 2.0 sein
quelle
Eine mögliche PHP-Lösung:
// load XML to SimpleXML $x = simplexml_load_string($xmlstr); // index it by title once $index = array(); foreach ($x->CD as &$cd) { $title = strtolower((string)$cd['title']); if (!array_key_exists($title, $index)) $index[$title] = array(); $index[$title][] = &$cd; } // query the index $result = $index[strtolower("EMPIRE BURLESQUE")];
quelle
Sie haben erwähnt, dass PHP-Lösungen akzeptabel sind, und PHP bietet eine Möglichkeit, dies zu erreichen, obwohl es nur XPath v1.0 unterstützt. Sie können die XPath-Unterstützung erweitern, um PHP-Funktionsaufrufe zuzulassen.
Weitere Beispiele finden Sie in der Dokumentation zu PHP registerPhpFunctions . Es zeigt im Grunde, dass "php: function" für die boolesche Auswertung und "php: functionString" für die String-Auswertung ist.
quelle