2009-06-05 8 views
2

Ich möchte nicht nach dem Zeichenfolgenwert suchen, um zwischen Groß- und Kleinschreibung zu unterscheiden. Ich möchte eine Suche nach dem Knoten ohne Berücksichtigung der Groß- und Kleinschreibung durchführen. Wenn die XML wie folgt aussieht:Wie führe ich eine Suche nach einem Knoten in PHP xpath durch?

<items> 
    <ITEM>My text!</ITEM> 
</items> 

ich so etwas wie dieses arbeiten müssen:

$someXmlDoc->xpath("/items/item/text()"); 

Derzeit ist nur das funktioniert:

$someXmlDoc->xpath("/items/ITEM/text()"); 
+1

Doppelte sein: http://stackoverflow.com/questions/625986/how-can-i-use-xpath-to-perform-a-case-insensitive-search-and -support-non-english Die Antwort ist schon da :) –

+1

Hallo Björn - Ich habe das gesehen, aber es sah aus, als ob das eine Antwort für eine Groß- und Kleinschreibung auf einen String-Wert, nicht einen Knoten, was ist Ich konnte nicht herausfinden. –

Antwort

2

Es gibt keinen Fall Umwandlung in XPath 1.0 wie von php unterstützt (siehe http://jp.php.net/manual/en/class.domxpath.php)

Sie könnte verwenden Sie die Übersetzungsfunktion, die in einem sehr begrenzten Sinne dargestellt wird. Hinweis: nicht zu empfehlen, da es nicht für Nicht-Englisch Zeichen

/items/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text() 

Sie auch eine Vereinigung tun, wie unten

/items/ITEM/text() | /items/item/text() 
+0

Die Union funktioniert, aber die Übersetzung nicht. Ich akzeptiere diese Antwort. Vielen Dank :) –

0

könnte funktionieren Diese seltsam ist. Bei XML-Tags wird die Groß-/Kleinschreibung beachtet (http://www.w3schools.com/xml/xml_syntax.asp). Daher sind <item> und <ITEM> zwei verschiedene Tags. So. "/items/item/text()" und /items/ITEM/text() sind zwei verschiedene Pfade.

<items> 
    <ITEM>My text!</ITEM> 
    <item>Your text!</item> 
</items> 

„My Text“ und „Ihr Text“ haben unterschiedliche xpath s

0

Unter Ihrer previousquestions auf dem gleichen Thema Rechnung eine andere Frage eintaucht: „Muss es xml sein“ Wie wäre es mit Json?
Um die Daten als Json auf dem Client verschlüsseln Sie jquery-json verwenden können, die in der Minimalversion

var jsondata = { 
    sender: "CATS", 
    subject: "All Your Base", 
    items: [] 
}; 
for(var i=0; i<8; i++) jsondata.items.push(i);

$.ajax({ url: " http://localhost/test.php ", type: "post", dataType: "json", data: $.toJSON(jsondata), contentType: "application/json; charset=utf-8",

Dann wird Ihr serverseitige PHP-Skript die Daten mit json_decode() entschlüsseln kann, und Sie werden eine native PHP-Array/Hash bekommen nur 2kb nimmt nach der JSON-Repräsentation des Javascript-Objekts/Hash.
Zum Zurücksenden von Daten an den Client können Sie json_encode() verwenden. Sie erhalten eine JSON-Repräsentation Ihres PHP-Arrays und da dataType: "json" gesetzt wurde, wird jquery ein natives JavaScript-Objekt zurückgeben, das diese Werte/Eigenschaften enthält.

0

Jonathan Fingland erste Variante funktionierte auch nicht für mich, aber ich fand schließlich Lösung.

Es sollte

/items/*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text() 
Verwandte Themen