Как зациклить XElements и сравнить значения с помощью C # - PullRequest
0 голосов
/ 09 мая 2018

У меня есть 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>. Если значения совпадают, выведите сообщение "Values matched", в противном случае сообщение "Values does not match" с использованием кода C #.

Как использовать для каждого цикла и сравнить для таких XElement.

1 Ответ

0 голосов
/ 09 мая 2018

Я думаю, тебе нужно что-то вроде этого

См. Мое 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");
        }
...