我需要频繁生成XML(A)
。
XML(A)
的结构不可更改。我只能更改XML(B)
。另外,我可以将XML(B)
存储在其他file/database/...
生成XML(A)
时。我需要检查<id></id>
中的XML(A)
的一个子节点(XML(B)
)是否在我的XML(B)
中。
当我在XML(A)
时,我想删除XML(B)
中的整个父节点。
当它不在我的XML(A)
时,我想在XML(B)
中添加<OPENCD>
<label>
<name>Alpha</name>
<cd>
<id>123</id>
</cd>
</label>
<label>
<name>BETA</name>
<cd>
<id>789</id>
</cd>
</label>
<label>
<name>GAMMA</name>
<cd>
<id>456</id>
</cd>
</label>
</OPENCD>
的子节点。
XML(A-之前)
<objektid>
<id>123</id>
<id>456</id>
</objektid>
XML(B-之前)
<OPENCD>
<label>
<name>BETA</name>
<cd>
<id>789</id>
</cd>
</label>
</OPENCD>
结果应如下所示
XML(A-后)
<objektid>
<id>123</id>
<id>456</id>
<id>789</id>
</objektid>
XML(B-后)
namespace ConsoleApp16
{
class Program
{
static void Main(string[] args)
{
XNodeEqualityComparer comparer = new XNodeEqualityComparer();
XDocument docA = XDocument.Load("XMLA.xml");
XDocument docB = XDocument.Load("XMLB.xml");
Dictionary<int, XNode> nodeDictionary = new Dictionary<int, XNode>();
SchleifeB();
SchleifeA();
docA.Save("XMLA.xml");
Console.ReadLine();
void SchleifeB()
{
foreach (XNode nodeB in docB.Elements("objektid").Elements("id"))
{
int hash = comparer.GetHashCode(nodeB);
nodeDictionary.Add(hash, nodeB);
Console.WriteLine("Eintrag in Dictonary hinzugefügt B");
Console.WriteLine(nodeB);
}
}
void SchleifeA()
{
foreach (XNode nodeA in docA.Elements("OPENCD").Elements("label").Elements("cd").Elements("id"))
{
int hashA = comparer.GetHashCode(nodeA);
if (nodeDictionary.ContainsKey(hashA))
{
Console.WriteLine("Duplikat gefunden A");
Console.WriteLine(nodeA);
nodeA.Parent.Parent.Remove();
//nodeA.Parent.Parent.Remove(); breaks the foreach. But I want it to loop trough each element to the end of my xmlA.
}
else
{
nodeDictionary.Add(hashA, nodeA);
Console.WriteLine("Eintrag in Dictonary hinzugefügt A");
Console.WriteLine(nodeA);
//Here I will add that nodeA gets pasted into XMLB
}
}
}
}
}
}
我的Testcode现在看起来像这样: THX cptwonton为您提供XDocument的建议。
node.parent.parent.Remove();
问题是XML(A)
打破了foreach循环,只有第一个找到的副本在; Added CA file path
curl.cainfo = "{REPLACE WITH FILE PATH}/cacert.pem"
中被删除。
答案 0 :(得分:0)
您可以采取的一种方法是:
或者,您可以使用XmlDocument库直接读取和操作XML文档。有关于如何在线完成此操作的指南。
如果我是你,我会使用XmlDocument库。