2009-12-30 122 views
12

我使用XmlWriter創建了一種類似於Xml的格式。但是在輸出中也有版本信息。從xml文件中刪除版本

<?xml version="1.0" encoding="utf-8"?> 

我不需要這個在我的文件中。我怎樣才能做到這一點?有什麼辦法通過代碼刪除它?

+9

停!請!不要製作「類似XML的格式」。使用真正的XML。如果它是類似於XML的,那麼另一個開發人員就會出現,看看它,假定它是XML,然後在嘗試將它解析爲XML時遇到問題。 (一旦你使用真正的XML,處理指令的使用將不會成爲問題,因爲在那裏給出的值是缺少處理指令時默認的值)。 – Quentin 2009-12-30 13:27:53

+2

這是規範要求的XML聲明。你爲什麼要刪除它? (該聲明在XML 1.0中是可選的,但在XML 1.1中是必需的) – 2009-12-30 13:28:11

+0

此外,您查找的信息包含在序列化對象時的問題_Omitting XML處理指令中(http://stackoverflow.com/questions/164585/省略-xml-processing-instruction-when-serializing-an-object) – 2009-12-30 13:28:59

回答

19

使用ConformanceLevelOmitXmlDeclaration性能。例如:

XmlWriter w; 
w.Settings = new XmlWriterSettings(); 
w.Settings.ConformanceLevel = ConformanceLevel.Fragment; 
w.Settings.OmitXmlDeclaration = true; 
+0

爲什麼要使用ConformanceLevel它沒有設置w.Settings.ConformanceLevel = ConformanceLevel.Fragment;也。什麼是ConformanceLevel? – viky 2009-12-31 09:23:01

+1

「碎片」一致性級別意味着你不寫整個文檔,你正在寫一個片段。該文檔說,如果'ConformanceLevel'設置爲'Document',那麼將'OmitXmlDeclaration'設置爲'true'不會產生任何影響。 – 2009-12-31 10:10:43

+0

只需要注意,你不需要有'w.Settings.ConformanceLevel = ConformanceLevel.Fragment'這行''如果你也使用'writer.WriteStartDocument();'它會引發錯誤。有人可能會認爲,您不應該以這種方式使用它,但只要您將其保留爲'settings.ConformanceLevel = ConformanceLevel.Auto;'即可。 – Ravendarksky 2015-11-23 16:57:24

11

在創建的XmlWriter,通過你想要使用XmlWriterSettings設置:

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.OmitXmlDeclaration = true; 

writer = XmlWriter.Create(Console.Out, settings); 

XmlWriterSettings具有其他性能,以及(縮進和更多)。