У меня есть метод сопоставления с XML файлами. Оба XML имеют одинаковый ClientRefNr. Но я пытаюсь получить всю информацию от обоих и сопоставить ее с одним XML. Это нормально работает. но иногда в Doc1 есть идентификаторы, которых нет в Doc2 (NULL). И это то, что мне нужно, чтобы просто перепрыгнуть и продолжить.
XML1:
<Table1>
<Id>1581016</ClientRefNr>
<Id>12</Id>
<Value>All commentary</Value>
</Table1>
<Table1>
<ClientRefNr>754030</ClientRefNr>
<Id>17</Id>
<Value>All commentary</Value>
</Table1>
XML2:
<Table1>
<ClientRefNr>1581016</ClientRefNr>
<Id>12</Id>
<Name>All commentary</Name>
</Table1>
<Table1>
<ClientRefNr>75885</ClientRefNr>
<Id>11</Id>
<Name>Martin</Name>
</Table1>
То, что я пробовал с C#
public XDocument MatchClientCommWithLZ(XDocument ClientCommXML, XDocument doc2)
{
XDocument result = new XDocument();
List<XElement> doc1Elements = ClientCommXML.Root.Elements().ToList();
List<XElement> doc2Elements = doc2.Root.Elements().ToList();
XElement accountElement = new XElement("ClientRefNr");
result = new XDocument(accountElement);
for (int i = 0; i < doc1Elements.Count(); i++)
{
XmlDocument subDoc = new XmlDocument();
subDoc.LoadXml(doc1Elements[i].ToString());
string tableName = subDoc.FirstChild.Name;
string ClientRefNr = doc1Elements[i].Elements().Where(x => x.Name == "ClientRefNr").FirstOrDefault().Value;
List<XElement> doc1Childs = doc1Elements[i].Elements().ToList();
List<XElement> doc2Childs = doc2Elements.Where(x => x.ToString().IndexOf(ClientRefNr) > -1).FirstOrDefault().Elements().ToList();
XElement tblElement = new XElement(tableName);
tblElement.Add(new XElement("Id", GetClientValue(doc1Childs, doc2Childs, "Id")));
tblElement.Add(new XElement("ClientRefNr", GetClientValue(doc1Childs, doc2Childs, "ClientRefNr")));
tblElement.Add(new XElement("Name", GetClientValue(doc1Childs, doc2Childs, "Name")));
tblElement.Add(new XElement("Value", GetClientValue(doc1Childs, doc2Childs, "Value")));
accountElement.Add(tblElement);
}
return result;
}
И это прекрасно работает. Но когда я нажимаю ClientRefNr
, где значение не существует в Doc2
, я получаю эту ошибку
An unhandled exception of type 'System.NullReferenceException' because this is NULL
List<XElement> doc2Childs = doc2Elements.Where(x => x.ToString().IndexOf(ClientRefNr) > -1).FirstOrDefault().Elements().ToList();
Любые идеи, как игнорировать, если ClientRefNr не существует в Doc2