Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何循环通过XML节点及其子节点来获取SQL和邮件地址_C#_Xml - Fatal编程技术网

C# 如何循环通过XML节点及其子节点来获取SQL和邮件地址

C# 如何循环通过XML节点及其子节点来获取SQL和邮件地址,c#,xml,C#,Xml,我正在尝试读取以下C#格式的xml。我必须将每个sql文本和邮件正文内容以及customer标记下的每个电子邮件地址存储到一个字符串变量中,以便进一步处理。我在下面给出的XML格式 <?xml version="1.0" encoding="utf-8" ?> <Queries> <Customer> <SQL ID="GYSQL">

我正在尝试读取以下C#格式的xml。我必须将每个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>

要继续使用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();