2012-05-31 16 views
38
<!-- here is some comment -- 
          ^
          | 
        what can be here apart from '>'? 

XML sembra non piacere "-" nei commenti. Ho letto da qualche parte che "-" cambia alcune modalità all'interno della cosa <! ... >, ma sembra che anche <!-- -- -- --> (numero pari di -- s) non sia valido. Se è una caratteristica storica, qual è la parte "pro" di esso? (La parte "contra" è l'incapacità di avere -- nei commenti).commenti XML e "-"

Qual è la ragione per complicare l'elaborazione dei commenti non facendo solo la fine del commento '->' e consentendo '-' inside?

risposta

31

Dal documento standard:

http://www.w3.org/TR/REC-xml/#sec-comments

[Definizione: I commenti possono apparire ovunque in un documento fuorché all'interno degli altri markup ; inoltre, possono apparire all'interno della dichiarazione del tipo di documento nei luoghi consentiti dalla grammatica. Non fanno parte dei dati dei caratteri del documento ; un processore XML può, ma non è necessario, renderlo possibile per un'applicazione per recuperare il testo dei commenti. Per compatibility, la stringa "-" (doppio trattino) non deve essere presente nei commenti .] I riferimenti di entità parametro non devono essere riconosciuti nei commenti .

+0

Quindi "pro" è compatibile con SGML. –

+1

Lo definirei un trade engineering. – asawyer

16

-- non è consentito per compatibilità con SGML. Da On SGML and HTML:

Lo spazio bianco non è consentito tra la dichiarazione di marcatura aperta delimitatore e il commento aperto delimitatore ('- '), ma è consentito tra il commento delimitatore di chiusura ('(" <!') - ") e il markup delimitatore di dichiarazione (" > "). Un errore comune è includere una stringa di trattini ("---") all'interno di un commento. Gli autori dovrebbero evitare mettendo due o più trattini adiacenti nei commenti.

Così in SGML <! e > "dichiarazioni di marcatura" apri e chiudi e -- apre e chiude commenti.

19

È una di quelle stupide regole in XML perché era in SGML e le persone non volevano interrompere la compatibilità. Perché è in SGML nessuno lo sa: probabilmente perché ha salvato tre righe di codice nel parser originale.

26

Forse può essere utile per qualcuno. Ho avuto un problema, che ho voluto commentare un parametro di riga di comando in XML che inizia con -: modo

<arg line="-v --line-break 0" /> 

così naturalmente normale come questo

<!-- <arg line="-v --line-break 0" /> --> 

non ha funzionato, ma io scoperto, che se il - viene sostituito dal suo equivalente UTF-8 &#x002D; funziona e può essere tollerato all'interno dei commenti.

Così nel mio caso la stringa

<arg line="-v &#x002d;&#x002d;line-break 0" /> 

viene analizzato in modo corretto e può essere parte di commenti.

Ovviamente sembra un po 'brutto, ma se qualcuno vuole tenere una stringa con - come commento nel suo XML - penso che sia ancora meglio di niente.

+14

È inoltre possibile utilizzare la sequenza di escape '-' che è la versione di escape ASCII ed è un po 'più corta della versione Unicode. – ricovox

+1

o '-' (ascii/unicode in hex) – Vojta

Problemi correlati