private void merge_customs(PackagePart remote_pp, PackagePart local_pp, XDocument remote_mainDoc)
{
// Get the remote documents custom.xml file.
XDocument remote_custom_document;
using (TextReader tr = new StreamReader(remote_pp.GetStream()))
remote_custom_document = XDocument.Load(tr);
// Get the local documents custom.xml file.
XDocument local_custom_document;
using (TextReader tr = new StreamReader(local_pp.GetStream()))
local_custom_document = XDocument.Load(tr);
IEnumerable<int> pids =
(
from d in remote_custom_document.Root.Descendants()
where d.Name.LocalName == "property"
select int.Parse(d.Attribute(XName.Get("pid")).Value)
);
int pid = pids.Max() + 1;
foreach (XElement remote_property in remote_custom_document.Root.Elements())
{
bool found = false;
foreach (XElement local_property in local_custom_document.Root.Elements())
{
XAttribute remote_property_name = remote_property.Attribute(XName.Get("name"));
XAttribute local_property_name = local_property.Attribute(XName.Get("name"));
if (remote_property != null && local_property_name != null && remote_property_name.Value.Equals(local_property_name.Value))
found = true;
}
if (!found)
{
remote_property.SetAttributeValue(XName.Get("pid"), pid);
local_custom_document.Root.Add(remote_property);
pid++;
}
}
// Save the modified local custom styles.xml file.
using (TextWriter tw = new StreamWriter(new PackagePartStream(local_pp.GetStream(FileMode.Create, FileAccess.Write))))
local_custom_document.Save(tw, SaveOptions.None);
}