我正在构建一些看起来像这样的XML:
<actionitem actiontaken="none" target="0" targetvariable="0">
<windowname>Popup Window</windowname>
<windowposx>-1</windowposx>
<windowposy>-1</windowposy>
<windowwidth>-1</windowwidth>
<windowheight>-1</windowheight>
<noscrollbars>false</noscrollbars>
<nomenubar />
<notoolbar />
<noresize />
<nostatus />
<nolocation />
<browserWnd />
</actionitem>
此XML必须符合客户端的确切规范,这意味着我不能在结束标记中包含空格。我知道MSDN说的是这个:
当写一个空元素时,在标记名和之间添加一个额外的空格 例如,结束标记。这提供了与旧版浏览器的兼容性。
但是,客户不会/不能为此做出让步。所以,我想我可以尝试这样的方法来解决这个问题:
xelement.ReplaceWith(" />", "/>");
但是当我运行程序时,我收到此错误消息:
Non white space characters cannot be added to content.
那么,有没有人知道我在构建XML文档后如何删除该空格?
答案 0 :(得分:2)
我不知道使用XElement
的方法,最好的选择是将Xml
作为文本读取,但为了避免不必要的多余字符串分配,请通过字符串来完成助洗剂:
var element = new XElement...;
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder))
{
element.Save(stringWriter);
}
stringBuilder.Replace(" />", "/>");
var xml = stringBuilder.ToString();
Console.WriteLine(xml);
任何执行.ToString().Replace()
的方法在内存使用方面的代价都会高得多。
关于客户评论的令人担忧的事情是,听起来他们有一个自制的xml解析器并不是很好,自闭标签中的空白应该没有什么区别。
答案 1 :(得分:1)
我会将XML
内容视为文字,然后Replace
这样的空格:
var lines = File.ReadAllLines("path");
for(int i=0;i<lines.Length;i++)
{
if (lines[i].Contains(" />")) lines[i] = lines[i].Replace(" />", "/>");
}
File.WriteAllLines("path", lines);