Ниже XML-документдобавить новые дочерние узлы в двойников потомок узла значения на основе узла дочернего узла атрибута
<al>
<hfs>
<hf id="1">A2</hf> ##1) based these hf nodes id attributes
<hf id="2">A1</hf>
</hfs>
<psteps>
<pstep>
<name>sharepoint</name>
<lze>
<lz hid="1"> ##1) in Lze node need to create same number lz nodes
## based previously quoted hf node id attribute
<ps>
<p>
<text>ziel</text>
<inhalt>ttt</inhalt>
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
<lz hid="2">
<ps>
<p>
<text></text>
<inhalt></inhalt> ##2) lz node with hid = "2" has 2 p nodes
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
</lze>
</pstep>
<pstep>
<name>aspnet</name>
<lze>
<lz hid="2"> ## 1)in Lze node need to create same number lz nodes
## based previously quoted hf node id attribute
<ps>
<p>
<text>ziel</text> ## 2)lz node with hid = "2" has 1 p node so need
<inhalt>ttt</inhalt> ## node to create 1 more as previously
</p> ## lz node
</ps>
</lz>
</lze>
</pstep>
</psteps>
</al>
мне нужно сделать две вещи здесь:
на основе сверхтонким ребенка HF узел мне нужно создать в hfs sibling psteps descendant lze node такое же количество узлов lz с одинаковым значением атрибута
Далее нужно найти максимальное количество p узлов в узле lz с такими же значение атрибута и создать такое же количество p-узлов в узлах rest lz с одинаковым значением атрибута.
Вот пример XML, который я пытаюсь произвести:
<al>
<hfs>
<hf id="1">A2</hf>
<hf id="2">A1</hf>
</hfs>
<psteps>
<pstep>
<name>sharepoint</name>
<lze>
<lz hid="1">
<ps>
<p>
<text>ziel</text>
<inhalt>ttt</inhalt>
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
<lz hid="2">
<ps>
<p>
<text></text>
<inhalt></inhalt>
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
</lze>
</pstep>
<pstep>
<name>aspnet</name>
<lze>
<lz hid="2">
<ps>
<p>
<text>ziel</text>
<inhalt>ttt</inhalt>
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
<lz hid="1">
<ps>
<p>
<text></text>
<inhalt></inhalt>
</p>
<p>
<text></text>
<inhalt></inhalt>
</p>
</ps>
</lz>
</lze>
</pstep>
</psteps>
<al>
я использовал следующий код, чтобы иметь возможность создавать <lz>
узлы недостающие. Мне нужно создать узлы <p>
, которые я не могу выбрать <p>
узлов с каждого узла <lz>
.
var doc = XDocument.Load("XmlFile1.xml");
var hfIds = (from hf in doc.Descendants("hf")
from attr in hf.Attributes("Id")
select attr.Value).Distinct(StringComparer.Ordinal).ToList();
var lze2 = doc.Descendants("lze")
.Select(lze => new {
element = lze,
hfids = lze.Descendants("lz").Attributes("hid"),
paras = (from lz in lze.Elements("lz")
from ps in lz.Elements("ps")
from p in ps.Elements("p")
select p).ToList()
});
foreach (var c in lze2) {
foreach (var hfid in hfIds.Where(hfid => !c.hfids.Any(attr => hfid.Equals(attr.Value)))) {
c.element.Add(new XElement("lz", new XAttribute("hfid", hfid),
new XElement("ps",
new XElement("p"),
new XElement("Text"),
new XElement("Content"))));
break;
}
}
Спасибо за помощь
Hi Sayad, Спасибо за помощь. Кажется, что ваш код не выбирает уникальный атрибут – gullamahi