2010-02-04 9 views
10

lo tanto, tengo algunos datos en la forma de:¿Incorporado función .NET para separar caracteres en flujo XML?

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

clases Qué NET/funciones querría usar para convertir esto en algo bonito y escribirlo en un archivo buscando algo como esto:

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

específica sobre las funciones y las clases por favor, no sólo "utilizar System.XML". Parece que hay un montón de diferentes maneras de hacer las cosas en .NET utilizando XML :(

Gracias

Respuesta

14

Utilización de la clase 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 para VB, +2 por ser exactamente lo que yo quería. Gracias :) – Polaris878

+0

Además, ¿hay una alternativa a la llamada a HttpUtility.HtmlDecode (str) ?? No me gusta tener que instalar System.Web solo para esa función ... – Polaris878

+0

XmlDocument no está haciendo nada aquí, tal como está escrito. HtmlDecode está haciendo todo el trabajo. Si omite la llamada HtmlDecode y usa XmlDocument para extraer los valores de XmlElements/XmlAttribute (a través de .ChildNodes, .SelectNode [s], etc.), los valores de esos objetos se guardarán correctamente. – technophile

8

puede utilizar este código.

string p = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;"; 
Console.WriteLine(System.Web.HttpUtility.HtmlDecode(p)); 
-3

he aquí que yo uso, pase en una cadena XML, establezca ToXml en true si desea convertir una cadena que contiene "foo </> < bar/> "para el xml equivalente nativo, "#lt; foo/# gt; #lt; Bar N. gt;" - reemplazar el hash con el símbolo de unión como este editor mantiene escapar de ella ... asimismo Si ToXml es falsa, se convierten una cadena que contiene el "#lt; foo/# gt; #lt; bar N. gt;" (reemplazar el hash con el símbolo de unión) para "<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; 
} 

(re colocar el hash con el símbolo de unión como este editor mantiene al tanto escapar de ella dentro de las etiquetas pre)

Editar: Gracias a technophile para señalar lo obvio, pero que está diseñado para cubrir única la Etiquetas XML Esa es la esencia de la función, que puede ampliarse fácilmente para abarcar otras etiquetas XML y no dude en agregar más que pueda haber perdido. ¡Aclamaciones! :)

+0

-1: no maneja correctamente todos los valores escapados (valores Unicode, otros valores de entidad XML, etc.). – technophile

+1

Tampoco maneja las comillas, que son bastante importantes para manejar los atributos. Usar una lista específica para intentar reemplazar es inherentemente peor que usar una API que cumpla con la especificación XML y manejará todo correctamente sin necesidad de bandaids la próxima vez que desee manejar " o lo que sea. – technophile

Cuestiones relacionadas