2015-02-20 4 views
0

У меня есть XML-файл, начинающийся с 1,030 КБ. После запуска моего кода, который добавляет элемент в раздел файла xml, файл уменьшается до 580 КБ. Я думаю, что это может быть причиной того, что вторичное приложение, просматривающее этот файл, не может прочитать вновь созданный файл. Я не знаю, почему это происходит. Есть ли способ остановить Linq to XML от сжатия файла?Linq to XML уменьшает размер файла

XDocument xDoc = XDocument.Load(cust_file); 

XElement parentXElement = xDoc.XPathSelectElement("LastLayout2/CommandBars"); 
XElement refXElement = xDoc.XPathSelectElement("LastLayout2/CommandBars/CommandBar[@Title = 'Standard']/Controls"); 

XElement temp = refXElement.XPathSelectElement("Control[@Parameter = 'GLOBAL!QMS_Launcher.Main']"); 

if (temp == null) 
{ 
XElement newElement = new XElement("Control"); 
XAttribute classAt = new XAttribute("Class", "CXTPControlButton"); 
XAttribute idAt = new XAttribute("Id", "0"); 
XAttribute paramAt = new XAttribute("Parameter", "GLOBAL!QMS_Launcher.Main"); 
XAttribute custIdAt = new XAttribute("CustomIconId", "68267"); 

XElement customIcon = new XElement("CustomIcon"); 
XElement icon = new XElement("Icon"); 
XAttribute width = new XAttribute("Width", "16"); 
XAttribute data = new XAttribute("Data", "ABAAAAAAFCAAAAAAEDAAICAAAAAAABAAAAAAABAAAAAABAAAACAADAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPAAAAPPAAAAPPAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPGAAAAAAJNAAAAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAHFAAAAAACHAAAAAAALAAAAAAPPAAAAAAJPAAAAAAHCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPFAAAAAAJOAAAAAAPPAAAAAAPPAAAAAAPPAAAAAALOABJAAACGDNJIAADNGJCGAAGJGAEAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDAAAAAANPAAAAAAMPAAAAAAJLAAAAAAMHAAAAAAFFAAAAAAODAAAAAAAKMGFEAAEIPPGKAAPPPHDFAAPHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAPPAAAAAAPGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGAAAAAAPPCBMAAAIFIHOEAAIHJFJDAAJFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOAAAAAAEPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHAAAAAAPPGBOAAAKGILHHAAILILHHAAILJJEGAAJJFEMCAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEPAAAAAAEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJAAAAAAPPGCJBAAAHPPGKAAPPPPGKAAPPPPGKAAPPMPEKAAMPPDJCAAPDAAAAAAAAAAAAAAAAAAAAAAOMAAAAAAPPAAAAAAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALLAAAAAAPPBCFBAAKFILHHAAILILHHAAILILHHAAILILHHAAILKGFEAAKGAAAAAAAAAAAAAAAAAAAAAANJAAAAAAPPAAAAAANMAAAAAABCAAAAAANBAAAAAABIAAAAAAPPAAAAAAHOAEKCAAMEIHOEAAIHIHOEAAIHIHOEAAIHIHOEAAIHJGDEAAJGGCJBAAGCAAAAAAAAAAAAAAFBAAAAAADOAAAAAAPPAAAAAAPPAAAAAAPPAAAAAAPPAAAAAALPMAIAAAHGNOKJAANOPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPOPFKAAOPKFKDAAKFAAAAAAAAAAAAAAKBAAAAAANJAAAAAABPAAAAAABPAAAAAAAMJBPAAALELMEIAALMPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPPPGKAAPPINMIAAINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); 

icon.Add(width, data); 

customIcon.Add(icon); 
newElement.Add(customIcon); 

newElement.Add(classAt, idAt, paramAt, custIdAt); 

        xDoc.Element("LastLayout2").Element("CommandBars").Elements("CommandBar") 
         .FirstOrDefault(item => item.Attribute("Title") != null && item.Attribute("Title").Value == "Standard") 
         .Element("Controls").Add(newElement); 

xDoc.Save(cust_file); 
+0

Может быть, ваш исходный файл имеет форматирование, * (пробелы) *, а ваш вновь созданный файл - нет. – Habib

+0

Я запустил WinDiff против вновь созданного файла и исходного файла. Я вижу, что мой вновь созданный файл добавляет пробел до конца закрывающего тега. Например, у исходного файла есть '/>', а у моего есть '/>'. Количество строк одинаково до и после. – user2970916

+3

Кодировка разницы? Возможно, UTF-16 - UTF8. Это может уменьшить вдвое размер. – Baldrick

ответ

3

Это звучит как проблема с кодировкой. Вероятно, вы сохраните его как другую кодировку в исходном документе и отличаетесь от ожидаемого целевого приложения. Следовательно, изменение размера файла.

Можно изменить кодировку, используемую для сохранения, как описано выше дБн:

Создать учетную XmlWriterSettings, установите XmlWriterSettings.Encoding в необходимости, а затем создать XmlWriter и передать его в XDocument.Save ().