2013-08-07 38 views
1

好吧,我有一种方法应该读取一个XML文档,然后将它们全部包装在一个更大的XML文档中。XmlWriter.WriteStartDocument()不向文件输出声明

<Elements> 
    <Element> 
    <Element> 
</Elements> 

的问题是,使用该代码的输出文件时,下方缺少声明

<?xml > 

任何理由这是为什么?我希望这是我失踪的愚蠢。

XmlWriter xmlWriter = XmlWriter.Create(outputFileName, xwsSettings); 

xmlWriter.WriteStartDocument(); 

xmlWriter.WriteStartElement("Elements"); 

foreach (var item in items) 
{ 
    xmlReader = XmlReader.Create(item.FullFilename); 

    while (xmlReader.Read()) 
    { 
     if(xmlReader.NodeType == XmlNodeType.Element) 
     { 
      xmlWriter.WriteRaw(xmlReader.ReadOuterXml()); 
      break; 
    } 
    } 
} 

xmlWriter.WriteEndElement(); 
xmlWriter.WriteEndDocument(); 

xmlWriter.Flush(); 
xmlWriter.Close(); 
xmlWriter = null; 
+1

什么是'xwsSettings'的设置? – Tim

+0

是的,谢谢@Tim,我是一个完整的白痴...... xwsSettings.OmitXmlDeclaration = true; 我以前用ConformanceLevel.Fragment这就是为什么我想我已经省略了声明处理... 什么白痴 –

+0

尝试'XmlWriter.Create(SW,新XmlWriterSettings {OmitXmlDeclaration =真});' – Nilesh

回答

3

由于@Tim曾在突出显示要检查我有我的XmlWriterSettings正确设置

XmlWriterSettings xwsSettings = new XmlWriterSettings(); 
xwsSettings.CheckCharacters = false; 
xwsSettings.CloseOutput = true; 
xwsSettings.ConformanceLevel = ConformanceLevel.Document; 
xwsSettings.Encoding = Encoding.UTF8; 
xwsSettings.Indent = false; 
xwsSettings.NewLineHandling = NewLineHandling.None; 

xwsSettings.OmitXmlDeclaration = true; <---- should have been false;