Problema con StringBuilder e XML letterali
-
06-09-2019 - |
Domanda
Sto avendo un problema con letterali XML con uno StringBuilder in VB 2008. Se io uso questo codice è tutto a posto.
Dim html As New System.Text.StringBuilder
html.Append(<html><body></body></html>)
MsgBox("hello")
Ora il problema è che voglio avvolgere HTML intorno a qualcosa che viene generato nel codice.
html.Append(<html><body>)
msgbox("nothing happens")
Quando il codice HTML non ha il tag corrispondente fine, si comporta come si va oltre il) e continua a cercarlo.
C'è qualcosa che sto facendo male qui?
Soluzione
Perché non state formando un XML corretto nella sua dichiarazione letterale XML (nel tuo caso non si sta chiudendo i tag), non è possibile utilizzare letterali XML qui. Si sia necessario avere le letterali XML essere corretta XML, o in alternativa convertire il codice di usarli come stringhe. Così:
html.Append("<html><body>")
msgbox("nothing happens")
Altri suggerimenti
Non ho mai usato letterali XML di VB, ma ho costruito un sacco di XML. Mi piace usare le classi 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()?
Il sospetto ovvia sarebbe che i letterali XML richiedono XML ben formato. Se si vuole avvolgere le cose, cadere in un'espressione incorporato come in ...
html.Append(<html><body><%= contentExp %></body></html>)
Non è una risposta, ma domanda di nuovo voi. Quale sarebbe il valore di usare letterali XML con il costruttore della stringa. Sembra, almeno a me che che va contro il grano. Crea il tuo XML utilizzando letterali e poi basta ottenere la sua rappresentazione di stringa utilizzando il metodo di chiamata .ToString () se avete bisogno di una stringa.