XML: radici multiple + contenuto di testo al di fuori della radice. Qualcuno lo fa?

-1

Ho un'altra di quelle domande "è fatta in XML" (il mio ultimo commento su xml non ha avuto risposta se qualcuno ha una buona spiegazione)

Mi stavo chiedendo se qualcuno, ovunque, avrebbe:

  1. Utilizza più root elementi in un documento XML
  2. Inserisci contenuto di testo al di fuori di un root elemento

W3C scoraggia queste pratiche, il DOMParser di Javascript non consente nemmeno questi casi e non riesco a pensare a una ragione ragionevole per fare una di queste cose. Tuttavia, so quanto siano state bizzarre alcune implementazioni di XML, quindi non ne sarei sorpreso.

Qualcuno ha qualche esempio del mondo reale in cui ciò sarebbe fatto? Accetterò anche una risposta che specifica se altri parser mainstream permettono di fare uno di questi.

    
posta Jeffrey Sweeney 07.04.2012 - 14:53
fonte

3 risposte

13

Come per lo standard, un documento XML deve avere esattamente un elemento radice per essere XML ben formato. Qualsiasi parser che accetta diversamente è errato e qualsiasi documento XML che è strutturato in modo diverso non è in effetti un documento XML.

Non è solo scoraggiato dal W3C, ma semplicemente contro lo standard.

    
risposta data 07.04.2012 - 15:12
fonte
3

Come un esempio di "mondo reale" di radici multiple e codice di testo intermedio, considera l'XML prodotto da "mysql -xml".

Una query composta (o stored procedure) può restituire più set di risultati, ognuno che inizia con la radice .... Se una delle subquery ha un errore, allora mysql produce una singola riga non XML "ERROR xxxx - message" invece di XML.

L'analisi dell'output XML di mysql coinvolge sia le radici multiple che i messaggi testuali.

Mi piacerebbe dire che mysql è incasinato e dovrebbe essere corretto, ma la realtà è che ho bisogno di analizzare l'output di mysql così com'è attualmente.

    
risposta data 01.06.2012 - 09:51
fonte
1

Questo può essere gestito specificando lo snippet in questione come entità di sistema esterna.

<xml version="1.0">

<!DOCTYPE root [
<!ENTITY about SYSTEM "path/to/about.xml">
]>

<root>
&about;
</root>

Il consiglio del W3C usa il termine "Parametro-entità" per questo. Vedi link per la definizione formale.

    
risposta data 07.04.2012 - 20:15
fonte

Leggi altre domande sui tag