XDocument.Load失去宣言

时间:2010-08-05 14:22:11

标签: c# linq-to-xml

我有一个像这样的XML模板文件

<?xml version="1.0" encoding="us-ascii"?>
<AutomatedDispenseResponse>
    <header shipmentNumber=""></header>
    <items></items>
</AutomatedDispenseResponse>

当我使用XDocument.Load时,出于某种原因

<?xml version="1.0" encoding="us-ascii"?>

被删除。

如何将文件加载到XDocument中,而不是丢失顶部的声明?

2 个答案:

答案 0 :(得分:2)

我怀疑它不是真的在加载时删除声明 - 当你写出文档时你就错过了它。这是一个适合我的示例应用程序:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XDocument doc = XDocument.Load("test.xml");
        Console.WriteLine(doc.Declaration);
    }
}

和test.xml:

<?xml version="1.0" encoding="us-ascii" ?>
<Foo>
  <Bar />
</Foo>

输出:

<?xml version="1.0" encoding="us-ascii"?>

XDocument.ToString()显示的声明不是,并且在您使用XDocument.Save时可能会被替换,因为您可能正在使用TextWriter之类的内容知道它正在使用哪种编码。如果你保存到一个流或只是一个文件名,它就保留了我的经验。

答案 1 :(得分:2)

它已加载。您可以使用以下方式查看并访问部分内容:

XDocument.Parse(myDocument).Declaration