c# - 如果子节点元素相等,如何添加父节点?

标签 c# .net xml linq linq-to-xml

我有非常大的 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/

相关文章:

.net - 如何从 wcf 服务返回 404 not found?

.net - EntityConnection 和打开的 SqlConnection

android - 在 string.xml 中存储可格式化的字符串资源

c# - CommandConverter 无法从 WPF 中的 System.String 转换

c# - 收集 Azure 中的 Service Fabric 群集日志

c# - 表单位置和大小行为

python - 使用 lxml 中的 Element 用换行符打印每个属性

sql-server - xml-sql : update multiple nodes

c# - 您可以在自己的入口点内实例化一个类吗?

c# - 如果用户帐户处于事件状态,如何检查 C#