corrispondenza senza distinzione tra maiuscole e minuscole in xpath?

Ad esempio, per l’xml qui sotto

       

Come abbinare i primi 4 record con xpath come //CD[@title='empire burlesque'] . C’è una funzione xpath per fare questo? Sono accettate anche altre soluzioni come la funzione PHP.

XPath 2 ha una funzione di stringa minuscola (e maiuscola). Non è esattamente la stessa cosa di maiuscole e minuscole, ma si spera che sarà abbastanza vicino:

 //CD[lower-case(@title)='empire burlesque'] 

Se stai usando XPath 1, c’è un trucco usando translate .

matches () è una funzione XPATH 2.0 che consente la corrispondenza regex senza distinzione tra maiuscole e minuscole.

Uno dei flag è i per la corrispondenza senza distinzione tra maiuscole e minuscole.

Il seguente XPATH che utilizza la funzione matches () con il flag senza distinzione tra maiuscole e minuscole:

 //CD[matches(@title,'empire burlesque','i')] 

Una ansible soluzione PHP:

 // 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")]; 

Questo non funziona negli strumenti di sviluppo di Chrome per individuare un elemento, sto cercando di individuare il pulsante “Invia” nella schermata

 //input[matches(@value,'submit','i')] 

Tuttavia, usando ‘translate’ per sostituire tutti i tappi in piccoli lavori come sotto

 //input[translate(@value,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'submit'] 

Aggiornamento: ho appena trovato il motivo per cui le “partite” non funzionano. Sto usando Chrome con xpath 1.0 che non capirà le “corrispondenze” della syntax. Dovrebbe essere xpath 2.0

Hai detto che le soluzioni PHP erano accettabili e PHP offre un modo per farlo anche se supporta solo XPath v1.0. È ansible estendere il supporto XPath per consentire chiamate di funzione PHP.

 $xpathObj = new DOMXPath($docObj); $xpathObj->registerNamespace('php','http://php.net/xpath'); // (required) $xpathObj->registerPhpFunctions("strtolower"); // (leave empty to allow *any* PHP function) $xpathObj->query('//CD[php:functionString("strtolower",@title) = "empire burlesque"]'); 

Vedi la documentazione di registerPhpFunctions di PHP per altri esempi. In pratica dimostra che “php: function” è per la valutazione booleana e “php: functionString” è per la valutazione delle stringhe.