[Risolto] xml getElementById come funziona?

Creare una macro - Scrivere uno script - Usare le API
Rispondi
nickGiard
Messaggi: 85
Iscritto il: lunedì 14 maggio 2012, 22:04

[Risolto] xml getElementById come funziona?

Messaggio da nickGiard »

Il bello di LibreOffice è che ha tante librerie API con services potenti ed utili ai più svariati scopi.
Il brutto di LibreOffice è che la documentazione delle stesse (sdk) è veramente scarna e addetta soprattutto a chi le cose le conosce già, e manca assolutamente di esempi significativi, questo sconforta ed allontana chi vuole avvicinarsi e cimentarsi nel creare macro od applicativi.
Veniamo ad un esempio, il modulo xml è sicuramente interessante, se voglio scrivere qualcosa che sia gestibile ad albero, come un manuale a capitoli e sottocapitoli, mi sembra la soluzione ideale.
Prendiamo un semplice file xml che contiene degli ID univoci :

Codice: Seleziona tutto

<?xml version="1.0" encoding="UTF-8"?>
<Root ID="0">
	<Elem ID="A" Txt="Capitolo A"></Elem>
	<Elem ID="B" Txt="Capitolo B"></Elem>
</Root>
Lo carico nel DOM :

Codice: Seleziona tutto

Dim oDocB : oDocB = CreateUnoService("com.sun.star.xml.dom.DocumentBuilder")
Dim xDoc : xDoc = oDocB.parseURI(sXmlPath) ' percorso del file xml
Ora vorrei recuperare l'elemento il cui ID="B", e vedo che l'interfaccia xDocument ha il metodo getElementById(string elementId), quindi

Codice: Seleziona tutto

Dim MyElem : MyElem  = xDoc.getElementById("B")
Purtroppo questo non funziona, penso che ovviamente in qualche punto bisogna dire che il mio ID è una key di un qualche dictionary, ma nonostante varie ricerche non sono stato in grado di trovare niente, ovviamente men che meno nella documentazione delle API.
Qualcuno ha due righe di codice funzionante ??
Grazie e un saluto a tutti gli amanti del coding
Ultima modifica di nickGiard il martedì 18 febbraio 2025, 10:20, modificato 1 volta in totale.
Nicola con LibreOffice 7.1 (x64) su Windows 11
nickGiard
Messaggi: 85
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: xml getElementById come funziona?

Messaggio da nickGiard »

Ho chiesto aiuto sul forum inglese, dove è stato chiarito il problema :
https://forum.openoffice.org/en/forum/v ... p?t=112503
In sostanza occorre premettere al document element una DTD che definisca per ogni tipo di elemento quale attributo debba intendersi come ID.
Dato che questo fatto può creare problemi di sicurezza, è stato sconsigliato l'uso.
Avevo già risolto il problema in modo alternativo, creando una variabile global EnumerableMap, e quindi nella sub di lettura del file xml, mediante un ciclo su tutti gli elementi, leggevo l'ID e lo assegnavo alla key, e come value l'elemento stesso.
A disposizione per eventuali approfondimenti.
NickGiard
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi