在内联VB代码中嵌入XML元素

时间:2008-11-17 15:18:02

标签: xml vb.net

考虑VB9中的以下代码:

Dim text = "Line1<br/>Line2"
Dim markup = <span><%= text %></span>.ToString

虽然我希望标记最终成为<span>Line1<br/>Line2</span>,但它实际上是评估为<span>Line1&lt;br/&gt;Line2</span>

有没有办法让变量的值不被HTML编码?

P.S。:这是我想要做的一个过于简单的例子。我知道这可以通过多种方式重写以使其工作,但是我的代码构建方式,对变量进行解码将是最佳的。如果那是不可能的话,那么我将走另一条路。

更多细节:“文本”来自数据库,用户可以使用回车输入自由格式文本。输出是HTML,所以我需要从数据库中获取值并将回车符转换为换行符。

2 个答案:

答案 0 :(得分:2)

此行为是“按设计”。在XML文本中嵌入字符串表达式时,该值将被转义为合法的字符串值。

要获得您正在寻找的行为,您需要在XML文本中嵌入XElement / XNode。以下面的例子为例。它会正确地将<br/>标记保留为XElement。

Dim text2 = <a>Line<br/>Line</a>
Dim markup2 = <span><%= text2 %></span>.ToString

实现此目的的一种方法是伪造XElement。要使文本成为有效的字符串,只需使用普通标记<a>将其包装在两端。现在这是一个可解析的XML片段。获得XElement之后,很容易获得您正在寻找的嵌入式行为

Dim text = "Line1<br/>Line2"
Dim text2 = XElement.Parse("<a>" + text + "</a>")
Dim markup = <span><%= text2.Nodes %></span>.ToString

答案 1 :(得分:1)

在VB.NET中,您可以直接编写 XML文字

Dim markup As XElement = <span>Line1<br/>Line2</span>
  • VB编译器“看到”XML,
  • 并为您创建等效的XLinq 命令。

详细了解XML Literals in VB.NET