Se vuoi ottenere tutti i nodi dell'xml che abbiano un dic_ref di un certo tipo ... (magari l'attributo dr_type="nelson_c") l'espressione xpath che ti server è qualche cosa del tipo:
//dic_ref[@dr_type='nelson_c']
in questo caso ottieni tutti i nodi che abbiano quel determinato attributo in una lista.
nel caso tu volessi filtrare ancora per il contenuto del nodo trovato
//dic_ref[dr_type="nelson_c"]/text()="4985"
Sono esempi a memoria...
Sto facendo qualche prova :)
Premetto che ho cercato qualcosa anche per SAX, ma non sono riuscito a trovare esempi/guide di utilizzo.
Per quanto riguarda xpath, ci sto giocando un pochino prima di cimentarmi nella stesura del codice. Quello che non riesco a capire è come filtrare i risultati in base a criteri "matematici". Esempio: poniamo che debba filtrare tutti i dati in cui il valore dell'attributo dr_type='nelson_c' sia < 100. Provo a scrivere qualcosa del tipo:
/kanjidic2/character[//dic_ref[@dr_type='nelson_c']<100]
ma il filtro sembra non funzionare. Dove sbaglio? E nel caso volessi inserire condizioni multiple? ???
L'espressione che volevi ... quella completa era :
//dic_ref[@dr_type='nelson_c']/.[text()<100]
Ma così non vale ... ;)
Ok, grazie mille! Forse ci siamo quasi!
/kanjidic2/character[dic_number[dic_ref[@dr_type='nelson_c']/.[text()<100 and text()>42]]]
Questo "coso" qui sopra filtra l'xml nel modo in cui serve a me, restituendomi tutti i nodi figli di character. Da questa lista posso quindi prendere i dati che mi servono (tipo il kanji con literal, i significati in diverse lingue con meaning, ecc.).
Mi resta quindi da vedere come funziona la unit xpath e vedere se è UTF-8 compliant... :D
La libreria pascal mi da un'errore nel riconoscimento dell'espressione... o.O
variable := EvaluateXPathExpression(
'//dic_ref[@dr_type="nelson_c"]/.[number(text())<100]', FDom);