2017-02-23 202 views
1

я использовал этот код для экспорта в файл XML из DataTable:Remove XML: пространство = "сохранить" из файла XML с помощью C#

dt1 = TNET2_POHeadService.TNET2_POHead_GetByPO_NoRaw(PO_No); 
       dt2 = TNET2_PODetailsService.TNET2_PODetails_GetByPO_NoRaw(PO_No); 
       ds.Tables.Add(dt1); 
       ds.Tables[0].TableName = "TNET2_POHead"; 
       ds.Tables.Add(dt2); 
       ds.Tables[1].TableName = "TNET2_PODetails"; 
       saveFileDialog1.ShowDialog(); 

       ds.WriteXml(saveFileDialog1.FileName); 

Все работало нормально, но:

<ContractNo>P1717-198905-003(01)</ContractNo> 
<KP_No xml:space="preserve">    </KP_No> 
<SettlementRoute1>TENTAC SUZHOU</SettlementRoute1> 

KP_No тег пустое значение. Я хочу удалить xml: space = "сохранить" файла экспорта XML. Как это сделать?

ответ

4

Класс XDocument в пространстве имен System.Xml.Linq позволяет легко управлять XML и использовать его с помощью LINQ.

пример ниже, чтобы удалить атрибут xml:space="preserve" из KP_No элемента файла XML:

XDocument doc = XDocument.Load("XMLFile1.xml"); // or XDocument.Load(myStream) ... 

Func<XAttribute, bool> preserveAttrFunc = atr => atr.Name.LocalName == "space" && atr.Value == "preserve"; 
XElement kp_no = doc.Descendants("KP_No").FirstOrDefault(kp => kp.HasAttributes && kp.Attributes().Any(preserveAttrFunc)); 

if(kp_no != null) 
    kp_no.Attributes().FirstOrDefault(preserveAttrFunc).Remove(); 

// doc.Save(filename) ... 

Примечание ваш XML это не распространяется есть корневой элемент. Хорошая практика состоит в том, чтобы один из них определялся в XML.

Результат после кода выше:

<root> 
    <ContractNo>P1717-198905-003(01)</ContractNo> 
    <KP_No></KP_No> 
    <SettlementRoute1>TENTAC SUZHOU</SettlementRoute1> 
</root> 
Смежные вопросы