2009-02-11 11 views
33

Così sto scrivendo del codice di generazione di XML, e ha scoperto che il seguente valore di attributo è stato rovinare la formattazione XML:Entità XML per "/"?

"Jim/Bob" 

Così ho guardato nel Entità XML utilizzati come sequenze di fuga e ogni lista che ho visto fatto non includere uno per la barra diretta. Mi sto perdendo qualcosa di ovvio qui? Sembra il tipo di cosa che vorresti sfuggire ...

+3

Si può definire "avvitamento"? Che codice stai usando per creare l'XML. – AnthonyWJones

+1

Ok, quindi risulta che non era il/dopo tutto era "&" in un altro attributo sulla stessa riga. Questo spiega perché non esiste una sequenza di escape per questo! – Alpants

+0

In retrospettiva questa domanda è stata piuttosto stupida, se qualcuno ha il rappresentante per rimuoverlo o chiuderlo .. dovrebbero! – Alpants

risposta

38

La barra in avanti è valida così com'è e non ha bisogno di ulteriore codifica.

I soli caratteri riservati sono:

> 
< 
& 
% 

Per ancor più entità XML - http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

+3

'%' non ha bisogno di codifica in XML. '>' Può richiedere la codifica in una particolare situazione di nicchia. "" "O" "" necessiteranno di codifica all'interno dei valori degli attributi (qualunque sia stato utilizzato come delimitatore per tale attributo). – bobince

+2

<, &, >, "," ..... –

+0

No. Nessuna magia, niente di niente. Niente mi ha aiutato nel mio caso. Solo 'formatted =" false "' l'ha risolto per me. –

0

Probabilmente avete un attributo vincolato, come definito nello schema XML.

Non so cosa intendi per formattazione XML.

3

Non riesco a capire perché un valore di "Jim/Bob" abbia bisogno di eseguire l'escape o causare problemi XML a tutti.

4

Non esiste un riferimento di entità predefinito per esso, ma è possibile utilizzare un riferimento di carattere: "& # 47;".

Tuttavia, non è necessario eseguire l'escape/per l'inclusione in XML. Potrebbe essere necessario includerlo per l'inclusione in qualcos'altro, ad esempio una parte del percorso URI. Ma prima dovresti scappare per questo formato; l'applicazione che preleva l'URI non avrebbe modo di sapere se l'hai codificata nell'XML o meno.

4

Non penso che i commenti in questo thread siano completamente corretti poiché se si utilizza uno schema (XSD) è possibile definire elementi con nomi Jim, Bob e Jim/Bob senza problemi. Ma poi quando vuoi definire l'elemento e l'entità:

<names> 
    <Jim>Carrey</Jim> 
    <Bob>Jones</Bob> 
    <Jim/Bob>Six figured Hillbilly</Jim/Bob> 
</names> 

I problemi sono ovvi.

+1

Grazie. Questo è il problema che stavo avendo. Dovevo sostituire un gruppo di caratteri di elemento xml non validi con sostituti validi. –

6

So che si è rivelato questo non era il problema, ma ho pensato che sarebbe utile ricordare che, oltre alla risposta di bobince, la Frazione Slash entità HTML &frasl; sembra just like a forward slash. Nel caso in cui qualcuno che raggiunge questa pagina in realtà fa desidera un'entità HTML per qualcosa che rappresenta una barra diretta.

+1

Il parser SAX mi ha dato errori su un'entità referenziata ma non dichiarata, usando ⁄ quindi ho usato l'equivalente Unicode ⁄ e funziona benissimo. Grazie. – Lambart

+1

In effetti @Lambart, non ero così specifico; sarà necessario utilizzare l'entità '⁄ in XML, che è naturalmente anche HTML valido, ma in HTML si ha la comodità aggiuntiva di usare l'entità HTML' ⁄ 'più facilmente ricordata. – sinisterstuf

+0

@bobince ha suggerito / ma c'è anche / e – kurdtpage

3

FYI sebbene una barra sia un XML valido, fare attenzione a come viene utilizzato a valle. Lo abbiamo usato per la connessione a una coda di bus di servizio blu. Azure stesso ha generato chiavi con barre nelle stringhe di connessione, ma poi si è rotto automaticamente quando abbiamo provato a utilizzarle. Sfuggirli con “&#47;” ha funzionato

"Jim&#47;Bob" 
+1

la soluzione migliore! – avisper

Problemi correlati