我有非常大的 xml 数据集。所以在 "SECTION"
包含 "Piece"
节点并且它们对于 "SECTION name="RF1WB-1"
具有相等的值,SECTION name="RF1WB-2"
, SECTION name="RF1WB-3"
。所以我想添加"Parent"
作为它们的父节点如果 “Piece”
标记包含与第二个 XML 中所示相同的值。
如果子节点元素包含相同的值,如何添加父节点?
XmlDocument doc = new XmlDocument();
doc.Load("..\\MFAB1.xml");
XmlNodeList xnList = doc.SelectNodes("MFAB.ini/SECTION");
foreach (XmlNode xn in xnList)
{
if (xn.HasChildNodes)
{
foreach (XmlNode item in xn.SelectNodes("Piece"))
{
if (xn.ChildNodes[0].InnerText.ToString().Contains(s3))
{
d1.Piece = xn.ChildNodes[0].InnerText.ToString();
}
______________
______________
______________
}
}
}
输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<MFAB.ini>
<SECTION name="RF1WB-1">
<Piece>
RF1-1
</Piece>
</SECTION>
<SECTION name="RF1WB-2">
<Piece>
RF1-1
</Piece>
</SECTION>
<SECTION name="RF1WB-3">
<Piece>
RF1-1
</Piece>
</SECTION>
<SECTION name="RF1-2WB-1">
<Piece>
RF1-2
</Piece>
</SECTION>
<SECTION name="RF1-2WB-2">
<Piece>
RF1-2
</Piece>
</SECTION>
</MFAB.ini>
预期输出文件:
我需要的是:
<?xml version="1.0" encoding="UTF-8"?>
<MFAB.ini>
<Parent name = "RF1-1">
<SECTION name="RF1-1WB-1">
<Piece>
RF1-1
</Piece>
</SECTION>
<SECTION name="RF1-1WB-2">
<Piece>
RF1-1
</Piece>
</SECTION>
<SECTION name="RF1-1WB-3">
<Piece>
RF1-1
</Piece>
</SECTION>
</Parent>
<Parent name = "RF1-2">
<SECTION name="RF1-2WB-1">
<Piece>
RF1-2
</Piece>
</SECTION>
<SECTION name="RF1-2WB-2">
<Piece>
RF1-2
</Piece>
</SECTION>
</Parent>
</MFAB.ini>
最佳答案
您可以按 <Piece>
对元素进行分组标记,然后将它们作为 <Parent>
的子项这样标记:
var xml = XDocument.Load(@"input file");
var result = new XElement(xml.Root.Name, xml.Root.Attributes().ToArray(),
xml.Root.Elements().GroupBy(x => x.Element("Piece").Value.Trim()).Select(x =>
new XElement("Parent", new XAttribute("name", x.Key), x))
);
result.Save(@"output file");
关于c# - 如果子节点元素相等,如何添加父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073074/