C# 如何循环通过XML节点及其子节点来获取SQL和邮件地址
我正在尝试读取以下C#格式的xml。我必须将每个sql文本和邮件正文内容以及customer标记下的每个电子邮件地址存储到一个字符串变量中,以便进一步处理。我在下面给出的XML格式C# 如何循环通过XML节点及其子节点来获取SQL和邮件地址,c#,xml,C#,Xml,我正在尝试读取以下C#格式的xml。我必须将每个sql文本和邮件正文内容以及customer标记下的每个电子邮件地址存储到一个字符串变量中,以便进一步处理。我在下面给出的XML格式 <?xml version="1.0" encoding="utf-8" ?> <Queries> <Customer> <SQL ID="GYSQL">
<?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>
要继续使用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();
试试xn.value…@PeterMarshall这是Customer节点的值,而不是海报想要的值。我如何才能获得标签下的每个电子邮件地址?现在将其添加到示例中,我不知怎么错过了您在问题中的评论。
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();