Я хотел бы использовать набор данных XML-документов и объединить их в один документ, содержащий только отдельные элементы.
Для иллюстрации у меня есть набор данных:
r, x
-- -------------------------------
1, <root><a>111</a></root>
2, <root><a>222</a><b>222</b></root>
3, <root><c>333</c></root>
приведет к:
<a>111</a><b>222</b><c>333</c>
Элемент <a>
из r = 2 не объединяется, поскольку у нас уже есть элемент = <a>
из r = 1. Мне нужно только объединить новые элементы, начиная с r = 1 и далее.
Я могу перебирать список, но мне сложно сравнивать и объединять. Приведенный ниже код не может идентифицировать <a>222</a>
как дубликат. Возможно ли сравнение значений элементов?
using (SqlDataReader dsReader = cmd.ExecuteReader())
{
XDocument baseDoc = new XDocument();
XDocument childDoc = new XDocument();
while (dsReader.Read())
{
// this is the base doc, merge forward from here
if (dsReader["r"].ToString() == "1")
{
baseDoc = XDocument.Parse(dsReader["x"].ToString());
SqlContext.Pipe.Send("start:" + baseDoc.ToString());
}
// this is a child doc, do merge operation
else
{
childDoc = XDocument.Parse(dsReader["x"].ToString());
// find elements only present in child
var childOnly = (childDoc.Descendants("root").Elements()).Except(baseDoc.Descendants("root").Elements());
foreach (var e in childOnly)
{
baseDoc.Root.Add(e);
}
}
}
}