C# 使用C语言进行Xml合并#

C# 使用C语言进行Xml合并#,c#,xml,c#-4.0,linq-to-xml,c#-3.0,C#,Xml,C# 4.0,Linq To Xml,C# 3.0,XmlNodeList x1=doc1.SelectSingleNodes(“/OutLooksync/value”); foreach(x1中的XmlNode节点) { doc2.appendChild(节点); } XmlNodeList x1=doc1.SelectSingleNodes(“/OutLooksync/value”); foreach(x1中的XmlNode节点) { doc2.appendChild(节点); }通过使用XmlDocument 您可以在xml1中的值和xm

XmlNodeList x1=doc1.SelectSingleNodes(“/OutLooksync/value”);
foreach(x1中的XmlNode节点)
{
doc2.appendChild(节点);
}
XmlNodeList x1=doc1.SelectSingleNodes(“/OutLooksync/value”);
foreach(x1中的XmlNode节点)
{
doc2.appendChild(节点);

}
通过使用
XmlDocument

  • 您可以在
    xml1
    中的值和
    xml2
    中的值中循环
  • 检查
    id
    是否等于,并从
    xml2
1-用于测试的Xml:

 XmlNode x1 = doc1.SelectSingleNode("/OutLooksync/value");
            foreach (XmlNode node in x1.SelectNodes("/OutLooksync/value"))
            {
                x1.AppendChild(doc2.ImportNode(node, true));

            }
 

我希望这对您有所帮助。

通过使用
XmlDocument

  • 您可以在
    xml1
    中的值和
    xml2
    中的值中循环
  • 检查
    id
    是否等于,并从
    xml2
1-用于测试的Xml:

 XmlNode x1 = doc1.SelectSingleNode("/OutLooksync/value");
            foreach (XmlNode node in x1.SelectNodes("/OutLooksync/value"))
            {
                x1.AppendChild(doc2.ImportNode(node, true));

            }
 
我希望这对您有所帮助。

string xml1=@”
1.
AAA
2.
bbb
3.
ccc
";
字符串xml2=@”
4.
abc
自闭症
";
XmlDocument doc1=新的XmlDocument();
doc1.LoadXml(xml1);
XmlDocument doc2=新的XmlDocument();
doc2.LoadXml(xml2);
XmlNode newvalue=doc1.ImportNode(doc2.DocumentElement.FirstChild,true);
doc1.DocumentElement.AppendChild(newvalue)
string xml1=@”
1.
AAA
2.
bbb
3.
ccc
";
字符串xml2=@”
4.
abc
自闭症
";
XmlDocument doc1=新的XmlDocument();
doc1.LoadXml(xml1);
XmlDocument doc2=新的XmlDocument();
doc2.LoadXml(xml2);
XmlNode newvalue=doc1.ImportNode(doc2.DocumentElement.FirstChild,true);


doc1.DocumentElement.AppendChild(newvalue)im获取错误无法隐式地将xmlnode转换为xmlnodelist。如果我使用xmlnode,那么我将从不同的文档上下文中获取要插入的节点。doc2.SelectSingleNode(“/OutLooksync”).appendChild(节点);对象引用错误bro@MadhavaSM要做到这一点并不简单,因为4行codeim getting error无法隐式地将xmlnode转换为xmlnodelist。如果我使用xmlnode,那么我将从不同的文档上下文中获取要插入的节点。doc2.SelectSingleNode(“/OutLooksync”).appendChild(节点);对象引用错误bro@MadhavaSM通过4行代码实现这一点并不简单。这段代码可以工作,但不符合我的逻辑,xml2的id值应该为1,因此它应该与xml1的id值1doc1合并。SelectSingleNode(“/OutLooksync/value”)。AppendChild(newvalue);这一个工作正常。这段代码工作正常,但不符合我的逻辑,xml2的id值应该为1,因此它应该与xml1的id值1doc1合并。SelectSingleNode(“/OutLooksync/value”)。AppendChild(newvalue);这一个很好。我还在努力,我已经在你的代码中做了一些更改,如果它工作的话,我会接受你的ans@MadhavaSM此代码给出了预期的结果。如果你有任何问题,我会向你解释。代码检查这些值是否与id匹配,因此从xml2预期id中的值中提取子项,并将其放入xml1中存在的值中。我需要一些小的变化,比如第二个xml记录不应该被1xml值记录替换,但它应该显示在它下面,例如。。1 AAA abc ASD这可能吗?我能知道你为什么使用它吗!=如果condition@MadhavaSM对于2个问题:
value1.选择SingleNode(“./id”).InnerText!=value2.选择SingleNode(“/id”)?.InnerText
的意思是:如果xml值中的id不等于xml2值中的id,则检查xml2中的下一个值。对于1个问题,我将添加代码,您不需要代码中的3个foreach,只需从导入到xml1的值中删除id。我仍在处理它,我已对您的代码进行了一些更改,如果它有效,那么我将接受您的ans@MadhavaSM此代码给出了预期的结果。如果你有任何问题,我会向你解释。代码检查这些值是否与id匹配,因此从xml2预期id中的值中提取子项,并将其放入xml1中存在的值中。我需要一些小的变化,比如第二个xml记录不应该被1xml值记录替换,但它应该显示在它下面,例如。。1 AAA abc ASD这可能吗?我能知道你为什么使用它吗!=如果condition@MadhavaSM对于2个问题:
value1.选择SingleNode(“./id”).InnerText!=value2.选择SingleNode(“/id”)?.InnerText
的意思是:如果xml值中的id不等于xml2值中的id,则检查xml2中的下一个值。对于1个问题,我将添加代码,代码中不需要3个foreach,只需从导入到xml1的值中删除id即可。
string xml1 = @"
    <OutLooksync>
        <value>
            <id>1</id>
            <name>AAA</name>
        </value>
        <value>
            <id>2</id>
            <name>bbb</name>
        </value>
        <value>
            <id>3</id>
            <name>ccc</name>
        </value>
    </OutLooksync>";

string xml2 = @"
    <OutLooksync>
        <value>
            <id>1</id>
            <Company>abc</Company>
            <address>ASD</address>
        </value>
    </OutLooksync>";
XmlDocument xmlDocument1 = new XmlDocument();
xmlDocument1.LoadXml(xml1);

XmlDocument xmlDocument2 = new XmlDocument();
xmlDocument2.LoadXml(xml2);

XmlNodeList values1 = xmlDocument1.SelectNodes("/OutLooksync/value");
XmlNodeList values2 = xmlDocument2.SelectNodes("/OutLooksync/value");

foreach(XmlNode value1 in values1)
{
    foreach(XmlNode value2 in values2)
    {
        if(value1.SelectSingleNode("./id").InnerText != value2.SelectSingleNode("./id")?.InnerText)
        {
            continue;
        }
        
        foreach(XmlNode toImport in value2.ChildNodes)
        {
            if (toImport.Name == "id")
                continue;

            value1.AppendChild(xmlDocument1.ImportNode(toImport, true));
        }
    }
}

Console.WriteLine(xmlDocument1.InnerXml);