[英]Merge two XML files in C# where the tags ID is the same
我需要在 C# 中合並兩個 XML 文件,其中 AccountNumber 在這些 XML 文件中是相同的。 我在 XML 文件中有大約 400 個帳戶。
XML 1:
<?xml version="1.0" standalone="yes"?>
<Account>
<Table1>
<Id>12</Id>
<AccountNumber>5050</AccountNumber>
<External>false</External>
</Table1>
</Account>
XML 2:
<?xml version="1.0" standalone="yes"?>
<Account>
<Table1>
<AccountNumber>5050</AccountNumber>
<ProductDate>2017-12-18</ProductDate>
<ProductNr>294</ProductNr>
</Table1>
</Account>
Så 結果會是這樣
XML 3:
<?xml version="1.0" standalone="yes"?>
<Account>
<Table1>
<Id>12</Id>
<AccountNumber>5050</AccountNumber>
<External>false</External>
<ProductDate>2017-12-18</ProductDate>
<ProductNr>294</ProductNr>
</Table1>
</Account>
你可以使用這個:
public class XmlMatcher
{
public XDocument MatchXmlFiles(XDocument doc1, XDocument doc2)
{
XDocument result = new XDocument();
List<XElement> doc1Elements = doc1.Root.Elements().ToList();
List<XElement> doc2Elements = doc2.Root.Elements().ToList();
XElement accountElement = new XElement("Account");
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 accountNumber = doc1Elements[i].Elements().Where(x => x.Name == "AccountNumber").FirstOrDefault().Value;
List<XElement> doc1Childs = doc1Elements[i].Elements().ToList();
List<XElement> doc2Childs = doc2Elements.Where(x => x.ToString().IndexOf(accountNumber) > -1).FirstOrDefault().Elements().ToList();
XElement tblElement = new XElement(tableName);
tblElement.Add(new XElement("Id" , GetChildValue(doc1Childs, doc2Childs, "Id")));
tblElement.Add(new XElement("AccountNumber", accountNumber));
tblElement.Add(new XElement("External" , GetChildValue(doc1Childs, doc2Childs, "External")));
tblElement.Add(new XElement("ProductDate" , GetChildValue(doc1Childs, doc2Childs, "ProductDate")));
tblElement.Add(new XElement("ProductNr" , GetChildValue(doc1Childs, doc2Childs, "ProductNr")));
accountElement.Add(tblElement);
}
return result;
}
public object GetChildValue(List<XElement> doc1Childs, List<XElement> doc2Childs, string name)
{
object value = string.Empty;
XElement child = doc1Childs.Where(x => x.Name == name).FirstOrDefault();
if (child != null)
{
value = child.Value;
}
else
{
child = doc2Childs.Where(x => x.Name == name).FirstOrDefault();
if(child != null)
value = child.Value;
}
return value;
}
}
用法:
XmlMatcher xmlManager = new XmlMatcher();
XDocument xml1 = XDocument.Load("Your Xm1 Path");
XDocument xml2 = XDocument.Load("Your Xm2 Path");
XDocument xml3 = xmlManager.MatchXmlFiles(xml1, xml2);
xml3.Save("Your Xm3 Path");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.