在c#中格式化XML数据

时间:2016-10-14 13:41:33

标签: c# xml linq formatting indentation

我一直在寻找,但我似乎无法找到解决方案.. 我正在使用Linq构建XElement,除非我尝试将Xelement.Value换行到多行,否则一切都很顺利。

我的代码如下:

var result = new XElement("Items",
new XAttribute("ID", id),
new XElement("ItemsA", $"\n{string.Join(",\n", ItemsA.Select(x => x.Value))}\n"),
new XElement("ItemsB", $"\n{string.Join(",\n", ItemsB.Select(x => x.Value))}\n"));

结果的输出如下:

<Items ID="123123">
  <ItemsA>
items1a,
items2a,
</ItemsA>
  <ItemsB>
items1b,
items2b,
</ItemsB>
</Items>

我的问题是 - 如何正确地格式化/缩进?

我尝试过更改$"\n\t{string.Join(",\n\t", ItemsA.Select(x => x.Value))}\n\t",但随后标签会更远,然后是其他标签..

我想要实现的目标是:

<Items ID="123123">
   <ItemsA>
      items1a,
      items2a,
   </ItemsA>
   <ItemsB>
      items1b,
      items2b,
   </ItemsB>
</Items>

我也尝试过:

private static XElement FormatXml(XElement input)
        {
            var settings = new XmlWriterSettings();
            settings.Indent = true;

            var builder = new StringBuilder(input.ToString());

            using(var writer = XmlWriter.Create(builder, settings))
            {
                input.WriteTo(writer);
            }
            return input;
        }

但也没有运气..

0 个答案:

没有答案