2008-11-17 97 views
2

考慮VB9下面的代碼:嵌入XML元素

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

此行爲是「按設計」。在XML文本中嵌入字符串表達式時,該值將被轉義爲合法的字符串值。

爲了獲得您正在尋找的行爲,您需要將XElement/XNode嵌入到XML文本中。以下面的例子。它會正確地將<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 
+0

查看上面的細節(剛剛添加)。除非我解析傳入的文本並構建每個元素,我不想將文本分隔爲元素。 – gfrizzle 2008-11-17 15:39:35

+0

查看我所做的附加評論。你將不得不解析完整的輸入,但不是每一個。 – JaredPar 2008-11-17 15:48:39

1

在VB.NET嵌入式行爲,你可以直接寫XML文本

Dim markup As XElement = <span>Line1<br/>Line2</span> 
  • VB編譯「看到」XML,
  • 併爲您創建相應的XLinq命令

瞭解更多關於XML Literals in VB.NET