2010-06-29 156 views
4

我在使用Xml和Linq的XHTML文檔上執行XML操作。將XElement轉換爲HTML字符串

將其轉換回字符串以便輸出到瀏覽器時,它會在創建XElement時以原始提供的形式呈現腳本標記,如 <script />

這可以防止它被市場上大多數瀏覽器正確處理。

我想,它輸出的腳本標籤這樣<script></script>

有人可以幫我這句話的方式進行的XElement到String的轉換?提前致謝。 :)

第一次編輯 提供更多信息,數據來自MSSQL 2008R2數據庫中的xml字段。 它是從XML字段加載 <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js" />

第二個編輯 工作樣本

using System; 
using System.Linq; 
using System.Xml.Linq; 

namespace Test1 
{ 
    class Test1 
    { 
     static void Main(string[] args) 
     { 
      XElement element = XElement.Parse("<div><script /><script>Test</script></div>"); 
      var EmptySet = (from e in element.DescendantsAndSelf() 
          where e.IsEmpty 
          select e); 
      foreach(XElement e in EmptySet) 
      { 
       e.Value = String.Empty; 
      } 
      Console.WriteLine(element.ToString(SaveOptions.None)); 
     } 
    } 
} 

,其結果

<div> 
    <script></script> 
    <script>Test</script> 
</div> 

回答

4

您是否嘗試過使用SaveOptions.DisableFormatting

我實際上無法重現問題,請介意您......您正在執行哪些XML操作?你自己創建script元素嗎?這工作得很好:

using System; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     XElement element = XElement.Parse("<script></script>"); 
     // Both of these write <script></script> 
     Console.WriteLine(element.ToString(SaveOptions.None)); 
     Console.WriteLine(element.ToString(SaveOptions.DisableFormatting)); 
    } 
} 

XDocument.SaveXElement.Save具有相同的選項。)

編輯:要使用一個空白文本節點改變與沒有子節點的元素融入其中,你可以設置element.Value到「」。例如:

XElement element = XElement.Parse("<script />"); 
Console.WriteLine(element.ToString()); // Prints <script /> 
element.Value = ""; 
Console.WriteLine(element.ToString()); // Prints <script></script> 
+0

遺憾的是,它是來自數據庫作爲

0

使用

XElement.Save(XmlWriter writer) 

作爲一個XmlWriter的輸出你使用StringWriter是快速可靠的方式得到你想要的。