C# 如何在单个节点中合并节点(当在特定节点中找到相同的值时)

C# 如何在单个节点中合并节点(当在特定节点中找到相同的值时),c#,xml,C#,Xml,当在节点中找到相同的值时,我想合并节点,并检查值是否按顺序 请检查以下几点: 1) 如果代码id标记值按顺序排列且主题标记值相同,则合并节点 2) 若代码id标记值是按顺序排列的,但主题标记值是diff,则应避免合并 3) 若代码id标记值不是按顺序排列的,但主题标记值相同,则避免合并 4) 若代码id标记值不是按顺序排列的,但主题标记值是diff,则避免合并 你能告诉我如何获得期望的产量吗 提前谢谢 我的代码: XDocument xDoc = XDocument.Parse(xmlstr)

当在节点中找到相同的值时,我想合并节点,并检查值是否按顺序

请检查以下几点:

1) 如果代码id标记值按顺序排列且主题标记值相同,则合并节点

2) 若代码id标记值是按顺序排列的,但主题标记值是diff,则应避免合并

3) 若代码id标记值不是按顺序排列的,但主题标记值相同,则避免合并

4) 若代码id标记值不是按顺序排列的,但主题标记值是diff,则避免合并

你能告诉我如何获得期望的产量吗

提前谢谢

我的代码:

 XDocument xDoc = XDocument.Parse(xmlstr);
            XElement xElementSelectRoot = xDoc.XPathSelectElement("//root");

            XElement xElementCreateRoot = new XElement(new XElement("root"));

            IEnumerable<XElement> lstOFCatogory = xElementSelectRoot.XPathSelectElements("//category").OrderBy(r => r.Value).ToList();

            foreach (var varXNodeCategory in lstOFCatogory)
            {
                if (varXNodeCategory.Parent.Name == "Product")
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(varXNodeCategory.Parent.ToString());
                    XmlNodeList xmlNodeCategoryList = xmlDoc.SelectNodes("//category");

                    XmlDocument xmlDoc1=new XmlDocument();
                    xmlDoc1.LoadXml(varXNodeCategory.ToString());

                    XmlNode xmlNodeSelectCategory = xmlDoc1.SelectSingleNode("//category");
                    foreach (XmlNode xmlNode in xmlNodeCategoryList)
                    {
                        xmlNode.ParentNode.RemoveChild(xmlNode);
                        if (xmlNode.FirstChild.InnerText.Equals(xmlNodeSelectCategory.FirstChild.InnerText))
                        {
                            xmlNodeSelectCategory = xmlNode;
                        }
                    }
                    xmlDoc.LastChild.AppendChild(xmlNodeSelectCategory);
                    XmlNode xmlNode1 = xmlDoc.SelectSingleNode("//Product");

                    var varXElement= XElement.Parse(xmlDoc.InnerXml);

                    xElementCreateRoot.Add(varXElement);
                }
                else
                {
                    xElementCreateRoot.Add(varXNodeCategory);
                }
            }
XDocument xDoc=XDocument.Parse(xmlstr);
XElement XelementSetElectroot=xDoc.XPathSelectElement(“//根”);
XElement xElementCreateRoot=新XElement(新XElement(“根”);
IEnumerable lstOFCatogory=xelementselectelectroot.XPathSelectElements(“//category”).OrderBy(r=>r.Value.ToList();
foreach(LSTOFF分类中的var varXNodeCategory)
{
if(varXNodeCategory.Parent.Name==“产品”)
{
XmlDocument xmlDoc=新的XmlDocument();
LoadXml(varXNodeCategory.Parent.ToString());
XmlNodeList xmlNodeCategoryList=xmlDoc.SelectNodes(“//类别”);
XmlDocument xmlDoc1=新的XmlDocument();
LoadXml(varXNodeCategory.ToString());
XmlNode xmlNodeSelectCategory=xmlDoc1.SelectSingleNode(“//category”);
foreach(xmlNodeCategoryList中的XmlNode XmlNode)
{
xmlNode.ParentNode.RemoveChild(xmlNode);
if(xmlNode.FirstChild.InnerText.Equals(xmlNodeSelectCategory.FirstChild.InnerText))
{
xmlNodeSelectCategory=xmlNode;
}
}
xmlDoc.LastChild.AppendChild(xmlNodeSelectCategory);
XmlNode xmlNode1=xmlDoc.SelectSingleNode(//产品);
var varXElement=XElement.Parse(xmlDoc.InnerXml);
添加(varXElement);
}
其他的
{
添加(varXNodeCategory);
}
}
徖。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 输入: 徖

<root>
  <category>
    <code-id type="pub">e00001</code-id>
    <title>test334</title>
    <ranking>240</ranking>
  </category>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00002</code-id>
      <title>test34</title>
      <ranking>160</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00003</code-id>
      <title>test6</title>
      <ranking>117</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <span>
        <code-id type="pub">e00004</code-id>
      </span>
      <title>test3</title>
      <ranking>52</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00005</code-id>
      <title>test28</title>
      <ranking>10</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00006</code-id>
      <title>test4</title>
      <ranking>116</ranking>
    </category>
  </Product>
  <category>
    <span>
      <code-id type="pub">e00007</code-id>
    </span>
    <title>test76</title>
    <ranking>14</ranking>
  </category>
</root>
<root>
  <category>
    <code-id type="pub">e00001</code-id>
    <title>test334</title>
    <ranking>240</ranking>
  </category>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00002</code-id>
      <title>test34</title>
      <ranking>160</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00003</code-id>
      <title>test6</title>
      <ranking>117</ranking>
    </category>
    <category>
      <span>
        <code-id type="pub">e00004</code-id>
      </span>
      <title>test3</title>
      <ranking>52</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00005</code-id>
      <title>test28</title>
      <ranking>10</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00006</code-id>
      <title>test4</title>
      <ranking>116</ranking>
    </category>
  </Product>
  <category>
    <span>
      <code-id type="pub">e00007</code-id>
    </span>
    <title>test76</title>
    <ranking>14</ranking>
  </category>
</root>

e00001
测试334
240
生物学文章
e00002
测试34
160
简言之
e00003
测试6
117
简言之
e00004
测试3
52
生物学文章
e00005
测试28
10
简言之
e00006
测试4
116
e00007
测试76
14
徖。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 我的输出将如下所示: 徖

<root>
  <category>
    <code-id type="pub">e00001</code-id>
    <title>test334</title>
    <ranking>240</ranking>
  </category>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00002</code-id>
      <title>test34</title>
      <ranking>160</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00003</code-id>
      <title>test6</title>
      <ranking>117</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <span>
        <code-id type="pub">e00004</code-id>
      </span>
      <title>test3</title>
      <ranking>52</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00005</code-id>
      <title>test28</title>
      <ranking>10</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00006</code-id>
      <title>test4</title>
      <ranking>116</ranking>
    </category>
  </Product>
  <category>
    <span>
      <code-id type="pub">e00007</code-id>
    </span>
    <title>test76</title>
    <ranking>14</ranking>
  </category>
</root>
<root>
  <category>
    <code-id type="pub">e00001</code-id>
    <title>test334</title>
    <ranking>240</ranking>
  </category>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00002</code-id>
      <title>test34</title>
      <ranking>160</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00003</code-id>
      <title>test6</title>
      <ranking>117</ranking>
    </category>
    <category>
      <span>
        <code-id type="pub">e00004</code-id>
      </span>
      <title>test3</title>
      <ranking>52</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>BIOLOGY ARTICLE</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00005</code-id>
      <title>test28</title>
      <ranking>10</ranking>
    </category>
  </Product>
  <Product>
    <Product-subject-title>
      <subject>IN BRIEF</subject>
    </Product-subject-title>
    <category>
      <code-id type="pub">e00006</code-id>
      <title>test4</title>
      <ranking>116</ranking>
    </category>
  </Product>
  <category>
    <span>
      <code-id type="pub">e00007</code-id>
    </span>
    <title>test76</title>
    <ranking>14</ranking>
  </category>
</root>

e00001
测试334
240
生物学文章
e00002
测试34
160
简言之
e00003
测试6
117
e00004
测试3
52
生物学文章
e00005
测试28
10
简言之
e00006
测试4
116
e00007
测试76
14

我找到了解决方案,现在可以正常工作了

        XDocument xmlDocNew = XDocument.Parse(xElementCreateRoot.ToString());
        XElement xElementSelectRootNew = xmlDocNew.XPathSelectElement("//root");
        XElement xElementCreateRootNew = new XElement(new XElement("root"));
        IEnumerable<XElement> lstOFCatogoryNew = xElementSelectRootNew.XPathSelectElements("//category").OrderBy(r => r.Value).ToList();
        List<Class1> lstClass1 = new List<Class1>();
        int intClassIndexCounter = 0;
        foreach (var x in lstOFCatogoryNew)
        {
            if (x.Parent.Name.ToString() == "Product")
            {
                if (lstClass1.Count() > 0)
                {
                    if (lstClass1[lstClass1.Count()-1].SujectName.Trim().ToString() == ((XElement)x.Parent.FirstNode).Value.Trim().ToString())
                    {

                        var xsDoc = new XDocument(new XElement(XElement.Parse(x.Parent.ToString())));

                        XElement xElementSelectProduct = xsDoc.XPathSelectElement("//Product");

                        xElementCreateRootNew.Elements("Product").Last().Add(xElementSelectProduct.XPathSelectElement("//category"));


                        lstClass1.Add(new Class1(((XElement)x.Parent.FirstNode).Value.Trim().ToString(),//subject title
                            ((XElement)x.FirstNode).Value.Trim().ToString(),//code-id
                            x.Parent.ToString().Trim()));//product set

                        intClassIndexCounter++;
                    }
                    else
                    {
                        xElementCreateRootNew.Add(x.Parent);
                        lstClass1.Add(new Class1(((XElement)x.Parent.FirstNode).Value.Trim().ToString(),//subject title
                            ((XElement)x.FirstNode).Value.Trim().ToString(),//code-id
                            x.Parent.ToString().Trim()));//product set

                        intClassIndexCounter++;
                    }
                }
                else
                {
                    xElementCreateRootNew.Add(x.Parent);
                    lstClass1.Add(new Class1(((XElement)x.Parent.FirstNode).Value.Trim().ToString(),//subject title
                        ((XElement)x.FirstNode).Value.Trim().ToString(),//code-id
                        x.Parent.ToString().Trim()));//product set

                    intClassIndexCounter++;
                }
            }
            else
            {
                xElementCreateRootNew.Add(x);
            }
        }
XDocument xmlDocNew=XDocument.Parse(xElementCreateRoot.ToString());
XElement XelementSelectElectrootNew=xmlDocNew.XPathSelectElement(“//根”);
XElement xElementCreateRootNew=新XElement(新XElement(“根”);
IEnumerable lstOFCatogoryNew=xelementselectelectrootnew.XPathSelectElements(“//category”).OrderBy(r=>r.Value.ToList();
List lstclas1=新列表();
int intClassIndexCounter=0;
foreach(lstOFCatogoryNew中的变量x)
{
if(x.Parent.Name.ToString()=“产品”)
{
如果(lstclas1.Count()>0)
{
if(lstclas1[lstclas1.Count()-1].SujectName.Trim().ToString()==((XElement)x.Parent.FirstNode).Value.Trim().ToString())
{
var xsDoc=newxdocument(new-XElement(XElement.Parse(x.Parent.ToString()));
XElement xElementSelectProduct=xsDoc.XPathSelectElement(“//产品”);
xElementCreateRootNew.Elements(“产品”).Last().Add(xElementSelectProduct.XPathSelectElement(//类别));
添加(新的Class1(((XElement)x.Parent.FirstNode).Value.Trim().ToString(),//主题标题
((XElement)x.FirstNode).Value.Trim().ToString(),//代码id
x、 Parent.ToString().Trim());//产品集
intClassIndexCounter++;
}
其他的
{
xElementCreateRootNew.Add(x.Parent);
添加(新的Class1(((XElement)x.Parent.FirstNode).Value.Trim().ToString(),//主题标题
((XElement)x.FirstNode).Value.Trim().ToStri