将XML字符串注入XmlWriter时的XML缩进

Col*_*ett 18 .net c# xml

我有一个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);
Run Code Online (Sandbox Code Playgroud)

根据Jeff的MSDN链接更改:

XmlWriterSettings set = new XmlWriterSettings();
set.Indent = true;
set.IndentChars = "\t";
set.Encoding = Encoding.UTF8;

xw = XmlWriter.Create(f, set);
Run Code Online (Sandbox Code Playgroud)

这不会改变最终结果.


现在我在我的XmlWriter中是一个任意深度,我从其他地方(我无法控制)得到一串XML,这是一个单行,非缩进的XML.如果我调用xw.WriteRaw(),那么该字符串是逐字注入的,并不遵循我想要的缩进.

...
string xml = ExternalMethod();
xw.WriteRaw(xml);
...
Run Code Online (Sandbox Code Playgroud)

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

我的偏好是使用我已经拥有的设置执行此操作的方法,并且无需重新加载最终XML以重新格式化它.我也不想用XmlReader等解析XML字符串,然后模仿它在我的XmlWriter中找到的东西(非常非常手动的过程).

在结束时,我宁愿有一个简单的解决方案,而不是遵循我的偏好.(当然,最好的解决方案很简单,并且符合我的偏好.)

aar*_*onb 30

如何使用XmlReader将xml读取为xml节点?

string xml = ExternalMethod();
XmlReader reader =  XmlReader.Create(new StringReader(xml));
xw.WriteNode(reader, true);
Run Code Online (Sandbox Code Playgroud)

  • 这仅在原始XML未格式化/缩进时有效.你应该能够通过提供一些忽略空格的`XmlReaderSettings来解决这个问题. (5认同)