Проблема с литералами StringBuilder и XML - PullRequest
0 голосов
/ 29 мая 2009

У меня проблема с использованием литералов 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 нет соответствующего конечного тега, он действует так, как будто он выходит за пределы) и продолжает его искать.

Я что-то здесь не так делаю?

Ответы [ 4 ]

2 голосов
/ 29 мая 2009

Я никогда не использовал 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()?
1 голос
/ 29 мая 2009

Не ответ, а вопрос к вам. Какова будет ценность использования XML-литералов со строителем строк. По крайней мере, мне кажется, что это идет вразрез с зерном. Создайте свой XML, используя литералы, а затем просто получите его строковое представление, используя вызов метода .ToString (), если вам нужна строка.

1 голос
/ 29 мая 2009

Поскольку вы не формируете правильный XML в своем выражении XML Literal (в вашем случае вы не закрываете теги), вы не можете использовать XML Literal здесь. Вам нужно либо, чтобы ваши литералы XML были правильными XML, либо альтернативно конвертировать код, чтобы использовать их в качестве строк. Таким образом:

html.Append("<html><body>")

msgbox("nothing happens")
1 голос
/ 29 мая 2009

Очевидным предположением будет то, что литералам XML требуется правильно сформированный XML. Если вы хотите обернуть вещи, вставьте встроенное выражение, как в ...

html.Append(<html><body><%= contentExp %></body></html>)
...