2010-02-04 15 views
10

Così, ho alcuni dati sotto forma di:Funzione .NET incorporata per caratteri di escape in streaming XML?

<foo><bar>test</bar></foo> 

classi Che NET/funzioni sarebbero voglio utilizzare per convertire questo per qualcosa di molto e lo scrive in un file cercando qualcosa di simile:

<foo> 
    <bar> 
     test 
    </bar> 
</foo> 

essere specifica sulle funzioni e le classi per favore, non solo "usare System.XML". Sembra che ci sia un sacco di modi diversi di fare le cose in .NET utilizzando XML :(

Grazie

risposta

14

Uso della classe System.Xml.XmlDocument ...

Dim Val As String = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;" 
Dim Xml As String = HttpUtility.HtmlDecode(Val) 

Dim Doc As New XmlDocument() 
Doc.LoadXml(Xml) 

Dim Writer As New StringWriter() 
Doc.Save(Writer) 

Console.Write(Writer.ToString()) 
+1

-1 per VB, +2 per essere esattamente quello che volevo. Grazie :) – Polaris878

+0

Inoltre, c'è un'alternativa alla chiamata a HttpUtility.HtmlDecode (str) ?? Non mi piace dover inserire System.Web solo per quella funzione ... – Polaris878

+0

XmlDocument in realtà non sta facendo nulla qui, come scritto. HtmlDecode sta facendo tutto il lavoro. Se si salta la chiamata HtmlDecode e si utilizza XmlDocument per estrarre i valori XmlElements/XmlAttribute (tramite .ChildNodes, .SelectNode [s], ecc.), I valori di tali oggetti verranno correttamente declassati. – technophile

8

è possibile utilizzare questo codice.

-3

Ecco uno che uso, passare una stringa Xml, impostare ToXml su true se si desidera convertire una stringa contenente "< foo/> < bar/> "al xml equivalente nativo, "lo stato logo #LT; foo/# gt; lo stato logo #LT; Bar N ° gt;" - sostituire l'hash con la e commerciale come questo editor mantiene scampo ... allo stesso modo , se ToXml è falso, si converte una stringa contenente il "lo stato logo #LT; foo/# gt; lo stato logo #LT; bar N ° gt;" (sostituire l'hash con la e commerciale) su "< foo/> < bar/> "

 
string XmlConvert(string sXml, bool ToXml){ 
    string sConvertd = string.Empty; 
    if (ToXml){ 
     sConvertd = sXml.Replace("<", "#lt;").Replace(">", "#gt;").Replace("&", "#amp;"); 
    }else{ 
     sConvertd = sXml.Replace("#lt;", "<").Replace("#gt;", ">").Replace("#amp;", "&"); 
    } 
    return sConvertd; 
} 

(ri posizionare l'hash con la e commerciale come questo editor continua a sfuggire entro i tag pre)

Edit: Grazie alla tecnofili per sottolineare l'ovvio, ma che è stato progettato per coprire solo la Tag XML Questo è l'essenza della funzione, che può essere facilmente estesa per coprire altri tag XML e sentirsi liberi di aggiungere altro che potrei aver perso! Saluti! :)

+0

-1: non gestisce correttamente tutti i valori di escape (valori Unicode, altri valori di entità XML, ecc.). – technophile

+1

Non gestisce nemmeno le virgolette, che sono piuttosto importanti nella gestione degli attributi. L'utilizzo di un elenco specifico per provare a fare Sostituzioni è intrinsecamente peggiore dell'utilizzo di un'API conforme alle specifiche XML e gestirà tutto correttamente senza bisogno di cerotti la prossima volta che si desidera gestire " o qualsiasi altra cosa. – technophile

Problemi correlati