[英]merging 2 xml records with the same schema
我們如何合並 2 個具有相同架構的 XML 記錄?
例如,假設我們有兩條記錄,例如:
<msg>
<name>alex</name>
<payload></payload>
</msg>
第二個:
<msg>
<name></name>
<payload>blabla</payload>
</msg>
預期結果:
<msg>
<name>alex</name>
<payload>blabla</payload>
</msg>
我們只是取了非空值。
我們如何合並兩個具有相同架構的 xml 記錄?
一個簡單的實現將只是 go 通過元素按名稱配對相應的項目並創建一個選擇非空白元素的文本的新元素。
XElement ShallowMerge(XElement a, XElement b) =>
new XElement(a.Name,
from ae in a.Elements()
join be in b.Elements() on ae.Name equals be.Name
select new XElement(ae.Name,
!String.IsNullOrWhiteSpace((string)ae)
? (string)ae
: (string)be
)
);
//two lists for temp storing .xml data
List<Person> list1= new List<Person>();
List<Person> list2= new List<Person>();
List<Person> list3= new List<Person>();//for mixing
string path=@"c:\.....";
//properties of .xml notes like 'name' and 'payload'
public class Person
{
public string name{ get; set; }//1
public string payload{ get; set; }//2
}
//load both .xml files saperatly
void load_list1()
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(path + @"\list1.xml");
foreach (XmlNode xnode in xdoc.SelectNodes("Items/Item"))
{
Person p = new Person();
p.name= xnode.SelectSingleNode("a").InnerText;
p.payload= xnode.SelectSingleNode("b").InnerText;
list1.Items.Add(p);
}
}
void load_list2()
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(path + @"\list2.xml");
foreach (XmlNode xnode in xdoc.SelectNodes("Items/Item"))
{
Person p = new Person();
p.name= xnode.SelectSingleNode("a").InnerText;
p.payload= xnode.SelectSingleNode("b").InnerText;
list2.Items.Add(p);
}
}
//start mixing both lists
void mixdata()
{
for(int i=0;i<list1.Items.Count;i++)
{
Person p= new Person();
p.name=list1.Items[i].name;
p.payload=list2.Items[i].payload;
list3.Items.Add(p);
}
}
//saving final mixed list to .xml
void save()
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(path + @"\Mixed_data.xml");
XmlNode xnode = xdoc.SelectSingleNode("Items");
xnode.RemoveAll();
foreach (Person i in list3)
{
XmlNode xtop = xdoc.CreateElement("Item");
XmlNode x1 = xdoc.CreateElement("a");
XmlNode x2 = xdoc.CreateElement("b");
x1.InnerText = i.name;
x2.InnerText = i.payload;
xtop.AppendChild(x1);
xtop.AppendChild(x2);
xdoc.DocumentElement.AppendChild(xtop);
}
xdoc.Save(path + @"\data.xml");
}
//let me know any errors
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.