我正在使用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>
答案 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.Save
和XElement.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快速可靠地获得你想要的东西。