Problema con StringBuilder y XML literales
-
06-09-2019 - |
Pregunta
Estoy teniendo un problema con los literales XML con un StringBuilder en Visual Basic 2008. Si utilizo este código que todo está bien.
Dim html As New System.Text.StringBuilder
html.Append(<html><body></body></html>)
MsgBox("hello")
Ahora el problema es que quiero para envolver alrededor de algo de HTML que se genera en código.
html.Append(<html><body>)
msgbox("nothing happens")
Cuando el HTML no tiene la etiqueta correspondiente que termina, que actúa como que va más allá de la) y sigue en busca de ella.
¿Hay algo que estoy haciendo mal aquí?
Solución
Debido a que usted no está formando un XML adecuado en su declaración XML literal (en su caso no se está cerrando sus etiquetas), no se puede utilizar literales XML aquí. O se necesita tener sus literales XML XML ser adecuado, o alternativamente convertir el código para utilizar como cadenas. Así:
html.Append("<html><body>")
msgbox("nothing happens")
Otros consejos
Nunca he usado literales XML de VB pero he construido una gran cantidad de XML. Me gusta usar las clases StringWriter / XmlTextWriter:
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
XmlTextWriter xw = new XmlTextWriter(sw);
xw.WriteStartElement("html");
xw.WriteStartElement("body");
xw.WriteRaw(contentExp);
...
wr.WriteEndElement(); // body
wr.WriteEndElement(); // html
}
// do something with sb.ToString()?
El presentimiento obvia sería que los literales XML requieren XML bien formado. Si desea envolver las cosas, la caída en una expresión incrustada como en ...
html.Append(<html><body><%= contentExp %></body></html>)
No es una respuesta, pero la pregunta de nuevo a usted. ¿Cuál sería el valor de usar los literales XML con generador de cadenas. Parece, al menos para mí que eso va contra la corriente. Crea tu XML usando literales y luego acaba de obtener la representación de cadena utilizando el método llamado .ToString () si necesita una cadena.