Sto scrivendo un programma Java che legge un file XML, rende alcune modifiche, e scrive di nuovo il codice XML.libreria XML Java che assicuri l'ordine attributo
Usando Java XML DOM API standard, l'ordine degli attributi non è conservato. che è, se ho un file di input come ad esempio:
<person first_name="john" last_name="lederrey"/>
potrei ottenere un file di output come:
<person last_name="lederrey" first_name="john"/>
Questo è corretto, perché la specifica XML dice che l'attributo ordine non è significativo.
Tuttavia, il mio programma deve mantenere l'ordine degli attributi, in modo che una persona possa facilmente confrontare il documento di input e di output con uno strumento diff.
Una soluzione per vale a elaborare il documento con SAX (anziché DOM): Order of XML attributes after DOM processing
tuttavia, questo non funziona per il mio caso, perché la trasformazione devo fare un nodo potrebbe dipendere su un'espressione XPATH sull'intero documento. quindi, la cosa più semplice sarebbe avere una libreria xml molto simile alla libreria standard Java java, con l'eccezione che l'ordine degli attributi preservers.
Esiste una tale biblioteca?
ps: per favore, evitare di discutere se devo mantenere l'ordine attributo o meno. questa è una discussione molto interessante, ma non è il punto di questa domanda.
È DOM che ti dà ordine di attributo casuale se aggiungi l'input nello stesso modo (ad eccezione dei valori ovviamente)? Potrebbe non darti l'ordine che desideri, ma sarebbe strano se ti desse un ordine casuale. Voglio dire che l'ordine potrebbe non essere specificato, ma ci sarà un po 'di logica in esso ... –
Penso che probabilmente non ci sia una libreria che ti indichi l'ordine degli attributi nel tuo file XML di origine. Tuttavia, potresti prendere in considerazione il controllo dell'output, in modo da poter creare gli attributi scritti sempre nello stesso ordine definito (ad esempio ordinato per nome). – obecker
@obecker, non ho il controllo sul file xml di input, quindi l'ordine degli attributi sull'input xml è sconosciuto e non posso forzare un ordine. –