Проблема со StringBuilder и XML-литералами
-
06-09-2019 - |
Вопрос
У меня возникла проблема с использованием XML-литералов с помощью StringBuilder в VB 2008.Если я использую этот код, все будет в порядке.
Dim html As New System.Text.StringBuilder
html.Append(<html><body></body></html>)
MsgBox("hello")
Теперь проблема в том, что я хочу обернуть HTML вокруг чего-то, что генерируется в коде.
html.Append(<html><body>)
msgbox("nothing happens")
Когда HTML-код не имеет соответствующего конечного тега, он действует так, как будто выходит за пределы ) и продолжает искать его.
Есть ли что-то, что я здесь делаю не так?
Решение
Поскольку вы не формируете правильный XML в своем операторе XML Literal (в вашем случае вы не закрываете свои теги), вы не можете использовать XML-литералы здесь.Вам либо нужно, чтобы ваши XML-литералы были правильными XML, либо, в качестве альтернативы, преобразовать ваш код для использования их в виде строк.Таким образом:
html.Append("<html><body>")
msgbox("nothing happens")
Другие советы
Я никогда не использовал XML-литералы VB, но я создал много XML-файлов.Мне нравится использовать классы 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()?
Очевидная догадка заключалась бы в том, что XML-литералы требуют хорошо сформированного XML.Если вы хотите обернуть что-либо, введите встроенное выражение, как в...
html.Append(<html><body><%= contentExp %></body></html>)
Не ответ, а ответный вопрос к вам.Какова была бы ценность использования XML-литералов с помощью string builder?По крайней мере, мне кажется, что это противоречит здравому смыслу.Создайте свой XML, используя литералы, а затем просто получите его строковое представление с помощью .Вызов метода toString(), если вам нужна строка.