如何循环使用XElements并使用C#比较值

时间:2018-05-09 19:12:45

标签: c# linq xelement

我有一个包含类似节点但值不同的XElement。 就像我的XElement看起来像这样

<Information>
    <Emp>
        <A.EMPLID>1</A.EMPLID>
        <A.Phone>12##</A.Phone>
    </Emp>
    <Emp_Add>
        <B.ID>125</B.ID>
        <Add>XXXXXXX</Add>
    </Emp_Add>
    <Emp_Add>
        <B.ID>1256</B.ID>
        <Add>ZZZZZZ</Add>
    </Emp_Add>
</Information>

实际上我需要遍历每个<Emp_Add>节点 - 获取<B.ID>的值 并将其与<Emp>.<A.EMPLID>值进行比较。如果值相同,则使用C#代码显示消息"Values matched" else message "Values does not match"

如何使用每个循环并比较XElement

1 个答案:

答案 0 :(得分:0)

我认为你需要这样的东西

查看我的dotnetfiddle

var xml =
                "<Information>\r\n\t<Emp>\r\n\t\t<A.EMPLID>1</A.EMPLID>\r\n\t\t<A.Phone>12##</A.Phone>\r\n\t</Emp>\r\n\t<Emp_Add>\r\n\t\t<B.ID>125</B.ID>\r\n\t\t<Add>XXXXXXX</Add>\r\n\t</Emp_Add>\r\n\t<Emp_Add>\r\n\t\t<B.ID>1256</B.ID>\r\n\t\t<Add>ZZZZZZ</Add>\r\n\t</Emp_Add>\r\n</Information>";
        var xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xml);
        XDocument xmlObj = XDocument.Parse(xmlDoc.OuterXml);

        var emplId = xmlObj.Descendants().Descendants().Descendants().FirstOrDefault().Value;
        var empsAdd = xmlObj.Descendants().Descendants().Where(d => d.Name.LocalName == "Emp_Add");
        foreach (var emp in empsAdd)
        {
            var currentEmpIdNode = emp.Descendants().FirstOrDefault();
            Console.WriteLine(currentEmpIdNode != null && currentEmpIdNode.Value == emplId
                              ? "Values matched"
                              : "Values does not match");
        }