Come analizzare / ignorare parti XML non valide?
-
03-07-2019 - |
Domanda
Sto scrivendo un'applicazione Air che utilizza un'API di webservice beta. A volte questa API mi restituisce un nodo XML non corretto e actionscript genererà un errore quando provo a creare l'oggetto XML da esso.
Quello che ho fatto è solo provare / catturare il risultato e ignorare l'intera risposta se l'XML è errato, ma potrei semplicemente ignorare il nodo non valido.
Ad esempio:
<result>
<Song>
<location>http://www.anyurl.com/audio/loftparty092108_pt4.mp3</location>
<title>Phonte party @ The Loft, 9/21/08 (pt. 4)</title>
<artist>Statik, Jahsonic & Stylus <artist>Statik, Jahsonic & Stylusre />
</Song>
</result>
Vedi quel tag? Se dovessi fare qualcosa del genere, mi piacerebbe saltare l'intera canzone e ottenere la prossima.
Esiste un modo per riuscirci?
Soluzione
- Scrivi al fornitore del servizio web. Raccontagli dell'XML non valido. Potrebbero semplicemente risolverlo.
- Quando viene restituito un XML non valido, il decodificatore XML predefinito di Flex è in perdita e genera.
- Se si desidera provare a elaborare il proprio decoder. Guarda il
xmlDecode
membro diHTTPService
.
Altri suggerimenti
Beautiful Soup fa questo, ma è scritto in Python. Ovviamente potresti sempre scavare nella fonte e vedere come l'hanno implementata.
Se il numero della classe di errori è piccolo, pre-elaborare l'XML per rimuovere l'errore, quindi passarlo al parser. Ciò consentirà di rimuovere facilmente la soluzione alternativa quando il problema è stato risolto. Nel caso precedente, devi caricare il file come testo, cercare nodi con tag duplicati e rimuovere l'intero nodo dal testo XML.
O semplicemente avvisare il fornitore di servizi Web e attendere - se stanno restituendo XML non valido quasi ogni parser lo soffocerà e dovrebbe avere un incentivo per risolverlo presto.
No, non è possibile ignorare parte di un documento XML non valido con un normale parser XML. È come chiedere al compilatore Flex di ignorare gli errori di sintassi e capire cosa intendeva realmente fare il programmatore. Dovrai scrivere il tuo parser che cerca di dedurre qual è la malformazione e cosa può ignorare.
Onestamente, qualsiasi servizio Web, anche una versione beta, che invia XML non valido non è affidabile. Implica che stanno componendo l'XML "a mano" invece di usare una classe programmatica. Chiunque lo faccia probabilmente farà molti altri errori, in particolare le regressioni. Il tuo tempo è troppo prezioso per dipendere da loro.
Saluti