簡體   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