2013-06-11 2 views
0

Я создал XmlDocument этого кода с C#,Как положить значение в каждом узле XML

protected XDocument generateXML() 
    { 
     XDocument xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"), 
    new XElement("Invoices", 
     new XElement("Invoice", 
      new XElement("InvoiceNumber", "s10838652") 
     ....... 

return xdoc; 

}

и в другом методе у меня есть:

public override void RunWintrackConnector() 
    { 

     XDocument xml = generateXML(); 

.... .

Затем я хотел бы поместить данные в каждый узел XML: (вместо s10838652, который я хотел бы назначить (string.Concat (bill.invoice) ., Bill.num);) к узлу INVOICENUMBER)

У меня есть правая часть, но не знаете, как получить доступ к каждому узлу XML:

xmlnode(for example InvoiceNumber) = Win2.IntegrationXML.XMLMisc.DirtyData.getStringValue(string.Concat(bill.invoice, bill.num)); 

ответ

0
xml 
    .Elements("Invoices") 
    .Elements("Invoice") 
    .Elements("InvoiceNumber") 
    .First() 
    .Value = string.Concat(bill.invoice, bill.num); 

редактировать - идти на все ваши счета:

foreach(var invoice in xml.Elements("Invoices").Elements("Invoice")) 
{ 
    invoice.Element("InvoiceNumber").Value = "asdf"; 
} 

Если вы знакомы с XPath, это эквивалентно выбору всех счетов-фактур с «Счета-фактуры/счета-фактуры».

+0

приятно, что работает замечательно, Tnx много :) –

+0

должен ли я иметь xml .Elements («Invoices») .Elements («Invoice») для всех узлов? потому что это похоже на 50 узлов, поэтому я должен повторить это во всем? –

0

Вы можете использовать XElement или XDocument, чтобы написать требуемые значения.

var valueToInsert = Win2.IntegrationXML.XMLMisc.DirtyData 
    .getStringValue(string.Concat(bill.invoice, bill.num)); 

XDocument xml = generateXML(); 
xml.Element("Invoices") 
    .Elements("Invoice").First() //this First is just an example 
    .Element("InvoiceNumber") 
    .Value = valueToInsert; 

Element() Возвращает первый найденный дочерний узел, и Elements() получает список всех дочерних узлов с этим именем узла. Узнайте, как ваши вложенные узлы, и вы должны быть настроены.

В качестве дополнительной заметки вы можете сделать это с помощью переменной XDocument, но я предпочитаю хранить все как XElement для дополнительной совместимости Linq.

+0

Спасибо, но мне нужно повторить ml.Element ("Invoices") .Elements ("Invoice"). Сначала() для всех узлов? –

+1

@nik, используйте комбинацию «Элемент» и «Элементы», чтобы получить требуемые значения. Используйте ссылки, которые я предоставил, чтобы узнать, что они делают. То, что я написал, было всего лишь образцом. Это зависит от вас, чтобы выяснить правильный шаблон для вашего кода. – gunr2171

Смежные вопросы