[英](Linq To) XML add all the elements in path that don't exist
我有一個看起來像這樣的XML模式:
<InnerNodeType1 Name="...">
<InnerNodeType2 Name="...">
<Leaf ID="..." />
</InnerNodeType2>
</InnerNodeType1>
InnerNodeType1
和InnerNodeType2
可以嵌套為:
<InnerNodeType1 Name="...">
<InnerNodeType1 Name="...">
<InnerNodeType1 Name="...">
<InnerNodeType2 Name="...">
<Leaf ID="..." />
</InnerNodeType2 Name="...">
</InnerNodeType1>
</InnerNodeType1>
</InnerNodeType1>
始終存在的內容:
InnerNodeType1
InnerNodeType2
InnerNodeType2
只有一個LeafNode
基本上是這樣的路徑: InnerNodeType1\\...\\InnerNodeType1\\InnerNodeType2\\...\\InnerNodeType2\\Leaf
。
給定3個字符串,其中包括:InnerNodeType1的路徑,InnerNodeType2的路徑和葉子,我想在XML文件中添加缺少的元素。 如果路徑的某些部分已經存在,則只需添加新元素作為子節點。
如何使用C#和(Linq to)XML做到這一點?
謝謝
您是否只想添加路徑中給定的元素節點? 如果我對您的理解正確,那么可以按照以下步驟進行操作:
class Program
{
static void Main(string[] args)
{
XDocument doc = new XDocument();
Add(doc, @"root\cont1", "cont2", "leaf");
Add(doc.Root, @"cont1\cont1", "cont2", "leaf");
Add(doc.Root, "cont1", "cont2", "leaf");
Add(doc.Root, @"cont1\cont1\cont1\cont1", @"cont2\cont2", "leaf");
doc.Save(Console.Out);
}
static void Add(XContainer cont, string path1, string path2, string path3)
{
Add(cont, path1 + "\\" + path2 + "\\" + path3);
}
static void Add(XContainer cont, string path)
{
Add(cont, path.Split('\\'));
}
private static void Add(XContainer cont, IEnumerable<string> names)
{
XName name = names.FirstOrDefault();
if (name == null)
{
return;
}
XContainer child = cont.Element(name);
if (child == null)
{
child = new XElement(name);
cont.Add(child);
}
Add(child, names.Skip(1));
}
}
輸出以下XML:
<root>
<cont1>
<cont2>
<leaf />
</cont2>
<cont1>
<cont2>
<leaf />
</cont2>
<cont1>
<cont1>
<cont2>
<cont2>
<leaf />
</cont2>
</cont2>
</cont1>
</cont1>
</cont1>
</cont1>
</root>
這絕不會檢查是否確保了某些元素的名稱和數量上的條件,只是添加了不存在的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.