首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XDocument中添加带有新行的新PreserveWhitespace LoadOptions

在XDocument中添加带有新行的新PreserveWhitespace LoadOptions
EN

Stack Overflow用户
提问于 2014-12-18 13:55:26
回答 2查看 5.7K关注 0票数 8

我试图编辑XML文件,保存它的格式:

代码语言:javascript
复制
<root>
    <files>
        <file>a</file>

        <file>b</file>
        <file>c</file>



        <file>d</file>
    </files>
</root>

因此,我使用

XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);

但当我试图添加新元素时

xDoc.Root.Element("files").Add(new XElement("test","test")); xDoc.Root.Element("files").Add(new XElement("test2","test2"));

它在同一行中添加,因此输出类似于:

代码语言:javascript
复制
<root>
    <files>
        <file>a</file>

        <file>b</file>
        <file>c</file>



        <file>d</file>
    <test>test</test><test2>test2</test2></files>
</root>

那么,我如何在新行中添加新元素,以保存初始格式?我尝试使用XmlWriterSetting.Indent = true一起保存XDocument,但正如我所看到的,元素在使用xDoc.Root.Element().Add()时会添加到同一行中。

更新:完整的程序加载、修改和保存文档。

代码语言:javascript
复制
using System;
using System.Xml;
using System.Xml.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {            
            string path = @".\doc.xml";    
            XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);

            //when i debug i see in "watch" that after these commands new elements are already added in same line
            xDoc.Descendants("files").First().Add(new XElement("test", "test"));
            xDoc.Descendants("files").First().Add(new XElement("test2", "test2"));

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

            using (XmlWriter writer = XmlTextWriter.Create(path, settings))
            {                
                xDoc.Save(writer);
                //Here i also tried save without writer - xDoc.Save(path)
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-18 14:09:31

这个问题似乎是由您使用LoadOptions.PreserveWhitespace引起的。这似乎超过了XmlWriterSettings.Indent -你基本上说过,“我关心这个空格”.“哦,现在我不知道了。”

如果删除该选项,只需使用:

代码语言:javascript
复制
XDocument xDoc = XDocument.Load(path);

..。然后适当地缩进。如果您想保留所有原始空白,但只缩进新元素,我认为您需要自己添加缩进。

票数 10
EN

Stack Overflow用户

发布于 2015-03-31 18:53:36

我有一个类似的问题,我可以用下面的代码来解决:

代码语言:javascript
复制
var newPolygon = new XElement(doc.Root.GetDefaultNamespace() + "polygon");
groupElement.Add(newPolygon); 
groupElement.Add(Environment.NewLine); 

我希望这个密码能帮助一些人..。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27548227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档