Domanda

Esiste un modo per ottenere informazioni più utili sull'errore di convalida? XmlSchemaException fornisce il numero di riga e la posizione dell'errore che per me ha poco senso. Dopo tutto, il documento XML non riguarda la sua rappresentazione testuale transitoria. Vorrei ottenere un errore elencato (o un codice di errore) che specifica cosa, quando sbagliato, il nome del nodo (o un percorso x) per individuare l'origine del problema in modo che forse io possa provare a risolverlo.

Modifica: sto parlando di documenti XML validi, ma non validi per uno schema particolare!

È stato utile?

Soluzione

Puoi farlo, in un certo senso, impostando un XmlReader i cui XmlReaderSettings contengono lo schema e quindi utilizzandolo per leggere il nodo del flusso di input per nodo. Puoi tenere traccia dell'ultimo nodo letto e avere una buona idea di dove ti trovi nel documento quando si verifica un errore di convalida.

Penso che se provi questo esercizio, scoprirai che ci sono molti errori di validazione (es. elemento mancante richiesto) in cui il concetto del nodo errore non ha molto senso. Sì, l'elemento genitore è chiaramente ciò che è in errore in quel caso, ma ciò che ha realmente innescato l'errore è stato il lettore che ha riscontrato il tag di fine senza mai vedere l'elemento richiesto, motivo per cui la linea di errore e la posizione puntano al tag di fine.

Altri suggerimenti

Nella mia esperienza, sei fortunato ad ottenere un numero di riga e analizzare la posizione.

Potresti prendere in considerazione la convalida tramite un DTD che può a volte dare errori leggermente più interessanti, tuttavia, su un progetto su cui sto attualmente lavorando, convalidiamo usando gli XSLT. La trasformazione controlla la sintassi e segnala gli errori come testo di trasformazione emesso. Considererei quel percorso se si desidera un controllo degli errori più amichevole. Per noi, un output vuoto non significa errori, altrimenti otteniamo alcuni dettagli dall'elaborazione XSLT su quale sia stato l'errore e dove.

personalmente non sono sicuro di come ottenere un errore più dettagliato, in genere se apri il documento e vai nella posizione menzionata puoi facilmente trovare l'errore.

Se il codice non è in grado di analizzare il file come XML valido, è piuttosto difficile fornire un XPATH o altri dettagli XML con nome.

Sembra che non sia un compito facile. La risposta di Robert Rossney si avvicina di più alla risoluzione programmatica del mio problema, quindi lo accetterò per ora. Continuerò a utilizzare la soluzione xsl. Chiunque trovi un modo migliore per risolvere gli errori di convalida può rispondere a questo thread.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top