#c# #xml
#c# #xml
Вопрос:
Я пытаюсь прочитать xml со следующим форматом, приведенным ниже в C #. Я должен сохранить каждый текст sql и содержимое почтового ящика и каждый адрес электронной почты в теге customer в строковую переменную для дальнейшего процесса. Формат XML, который я привел ниже
<?xml version="1.0" encoding="utf-8" ?>
<Queries>
<Customer>
<SQL ID="GYSQL">
Select * from customer where code ='GYSQL'
</SQL>
<MailBody>
Please find the Report GY
</MailBody>
<Address>customer1@mail.com</Address>
<Address>customer2@mail.com</Address>
</Customer>
<Customer>
<SQL ID="TSSQL">
Select * from customer where code ='TSSQL'
</SQL>
<MailBody>
Please find the Report TS
</MailBody>
<Address>customer3@mail.com</Address>
<Address>customer4@mail.com</Address>
<Address>customer5@mail.com</Address>
</Customer>
</Queries>
Я должен перебирать каждый тег клиента
var xml = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) "\xml\sql.xml";
XmlDocument xml1 = new XmlDocument();
xml1.Load(xml);
XmlNodeList list = xml1.SelectNodes(@"//Customer");
foreach (XmlNode xn in list)
{
string Sql = Get the text from SQL tag under Customer
string mailbody = Get the text under tag CustomerMailbody
//Here I have to get each email address in a loop in a string variable
}
Комментарии:
1. попробуйте xn.value ….
2. @PeterMarshall Это значение узла клиента, а не то, что хочет плакат.
Ответ №1:
Чтобы продолжить работу с выражениями XPath, вы могли бы сделать что-то вроде этого:
foreach (XmlNode xn in list)
{
// Find the first child node of 'xn' with name "SQL"
var sqlForThisCustomer = xn.SelectSingleNode("SQL")?.InnerText;
// Same for "MailBody"
var mailBodyForThisCustomer = xn.SelectSingleNode("MailBody")?.InnerText;
var addressList = xn.SelectNodes("Address");
foreach(XmlNode adr in addressList) {
var currentAddress = adr.InnerText;
}
}
Для такого рода работы я обычно предпочитаю XDocument
:
var doc = XDocument.Parse(xmlstring);
var customers = doc.Root
.Elements("Customer")
.Select(c => new {
SQL = c.Element("SQL")?.Value,
MailBody = c.Element("MailBody")?.Value,
Addresses = c.Elements("Address").Select(x => x.Value).ToList()
})
.ToList();
Комментарии:
1. Как я могу получить каждый адрес электронной почты под тегом <Адрес>
2. Добавил это к примеру сейчас, я как-то пропустил ваш комментарий в вопросе.