我有一个写入文件的XmlTextWriter和一个使用该文本编写器的XmlWriter。该文本编写器设置为输出制表符缩进的XML:

XmlTextWriter xtw = new XmlTextWriter("foo.xml", Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xtw.IndentChar = '\t';
xtw.Indentation = 1;

XmlWriter xw = XmlWriter.Create(xtw);

根据Jeff的MSDN链接更改:
XmlWriterSettings set = new XmlWriterSettings();
set.Indent = true;
set.IndentChars = "\t";
set.Encoding = Encoding.UTF8;

xw = XmlWriter.Create(f, set);

这不会改变最终结果。

现在,我对XmlWriter有了任意深度,并且从其他地方(我无法控制)获取一串XML,这是单行,非缩进XML。如果我调用xw.WriteRaw(),那么该字符串将逐字注入(inject),并且不会遵循我想要的缩进。
...
string xml = ExternalMethod();
xw.WriteRaw(xml);
...

本质上,我想要一个WriteRaw来解析XML字符串并遍历所有WriteStartElement等,以便根据XmlTextWriter的设置重新格式化它。

我的偏好是一种使用已有的设置执行此操作的方法,并且无需重新加载最终的XML即可重新设置格式。我也不想用XmlReader之类的语法来解析XML字符串,然后模仿它在XmlWriter中找到的内容(非常手动的过程)。

最后,我希望有一个简单的解决方案,而不是遵循我的喜好的解决方案。 (最好的解决方案自然会很简单,并且会按照我的喜好进行。)

最佳答案

使用XmlReader读取xml作为xml节点怎么样?

string xml = ExternalMethod();
XmlReader reader =  XmlReader.Create(new StringReader(xml));
xw.WriteNode(reader, true);

关于c# - 将XML字符串注入(inject)XmlWriter时的XML缩进,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/858630/

10-10 03:08