将XElement转换为HTML字符串

时间:2010-06-29 06:10:34

标签: html xml linq scripting xelement

我正在使用Xml和Linq在XHTML文档上执行XML操作。

将其转换回String以输出到浏览器时,在创建XElement时,它会以原始提供的形式呈现脚本标记 <script />

这可以防止市场上的大多数浏览器正确处理它。

我想以一种输出脚本标记的方式执行XElement to String转换,如<script></script>

有人可以帮助我吗?提前致谢。 :)

首次修改 提供更多信息,数据来自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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

使用

XElement.Save(XmlWriter writer)

作为XmlWriter的输出,你使用StringWriter快速可靠地获得你想要的东西。