繁体   English   中英

合并C#中的两个XML文档

[英]Merge two XML Documents in C#

我正在尝试合并两个 xml 文档并且不想保留重复项。 让我在这里提一下,我将这两个 xml 文档放在一个字符串变量中。 我正在尝试以下方式,但出现错误。 我尝试使用 XmlDocument 和 XDocument 但没有成功。 获取非法字符。

我也尝试过这些解决方案,但失败了。

  1. 结合两个 xml_docs C# xmlDocument
  2. 如何在 C# 中合并两个 XmlDocument
  3. 智能合并两个XML文件
  4. 如何合并 XML 文件?
  5. 如何在 C# 中合并两个 XmlDocument
  6. 将两个xml文件合并为一个的最快方法是什么

请帮助我。

public class Sample
{
    public static void Main()
    {
        var xDoc1 = string.Concat("<?xml version='1.0' encoding='utf - 8'?>", 
            "<Tp>" +
            "<Txn-Profile>" +
            "<TXN_CODE>CHD</TXN_CODE>" +
            "<NO_OF_TXN>5</NO_OF_TXN>" +
            "<MAX_TXN_AMOUNT>70500</MAX_TXN_AMOUNT" +
            "><TOTAL_AMOUNT>80500</TOTAL_AMOUNT>" +
            "<TXN_DESCUI>Cash Deposit1</TXN_DESCUI>" +
            "</Txn-Profile>" +
            "</Tp>");

        var doc1 = XDocument.Load(xDoc1);


        var xDoc2 = string.Concat("<?xml version='1.0' encoding='utf - 8'?",
            "<Tp>" +
            "<Txn-Profile>" +
            "<TXN_CODE>CHD</TXN_CODE>" +
            "<NO_OF_TXN>5</NO_OF_TXN>" +
            "<MAX_TXN_AMOUNT>90000</MAX_TXN_AMOUNT>" +
            "<TOTAL_AMOUNT>210000</TOTAL_AMOUNT>" +
            "<TXN_DESCUI>Cash Deposit1</TXN_DESCUI>" +
            "</Txn-Profile>" +
            "<Txn-Profile>" +
            "<TXN_CODE>DCL</TXN_CODE>" +
            "<NO_OF_TXN>5</NO_OF_TXN>" +
            "<MAX_TXN_AMOUNT>50000</MAX_TXN_AMOUNT>" +
            "<TOTAL_AMOUNT>200000</TOTAL_AMOUNT>" +
            "<TXN_DESCUI>Deposit By Instruments (Clearing)</TXN_DESCUI>" +
            "</Txn-Profile>" +
            "</Tp>");
        var doc2 = XDocument.Load(xDoc2);

        var mergeXmlDocs = doc1.Descendants("Tp").Union(doc2.Descendants("Tp"));

        Console.WriteLine(mergeXmlDocs.ToString());

        Console.ReadLine();
    }
}

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication176
{
    class Program
    {

        static void Main(string[] args)
        {
            string xDoc1 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
                "<Tp>" +
                "<Txn-Profile>" +
                "<TXN_CODE>CHD</TXN_CODE>" +
                "<NO_OF_TXN>5</NO_OF_TXN>" +
                "<MAX_TXN_AMOUNT>70500</MAX_TXN_AMOUNT" +
                "><TOTAL_AMOUNT>80500</TOTAL_AMOUNT>" +
                "<TXN_DESCUI>Cash Deposit1</TXN_DESCUI>" +
                "</Txn-Profile>" +
                "</Tp>";

            var doc1 = XDocument.Parse (xDoc1);


            string xDoc2 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
                "<Tp>" +
                "<Txn-Profile>" +
                "<TXN_CODE>DCL</TXN_CODE>" +
                "<NO_OF_TXN>5</NO_OF_TXN>" +
                "<MAX_TXN_AMOUNT>50000</MAX_TXN_AMOUNT>" +
                "<TOTAL_AMOUNT>200000</TOTAL_AMOUNT>" +
                "<TXN_DESCUI>Deposit By Instruments (Clearing)</TXN_DESCUI>" +
                "</Txn-Profile>" +
                "</Tp>";
            XDocument doc2 = XDocument.Parse(xDoc2);
            List<string> txnCodes2 = doc2.Descendants("TXN_CODE").Select(x => (string)x).ToList();


            XElement txn2 = doc2.Descendants("Txn-Profile").FirstOrDefault();

            foreach (XElement txnProfilet in doc1.Descendants("Txn-Profile"))
            {
                string txnCode1 = (string)txnProfilet.Descendants("TXN_CODE").FirstOrDefault();
                if (!txnCodes2.Contains(txnCode1))
                {
                    txn2.Add(txnProfilet);
                }
            }

        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM