【问题标题】:Read from 2 XML files using StreamReader使用 StreamReader 从 2 个 XML 文件中读取
【发布时间】:2016-09-05 15:35:56
【问题描述】:

假设我有以下 XML 文件:


Sample1.xml

<?xml version="1.0" encoding="utf-8"?>
<Root>
   <NodeA>
      <Node1>test1</Node1>
      <Node1>test2</Node1>
   </NodeA>
</Root>

Sample2.xml

<?xml version="1.0" encoding="utf-8"?>
<Root>
   <NodeB>
      <Node1>test1</Node1>
      <Node1>test2</Node1>
   </NodeB>
</Root>

我的目标是使用一种工厂方法反序列化这 2 个 xml 文件。

为此,我有以下通用代码:

    public static T get<T>() where T : class // class = all reference types
            {
                string Ttype = typeof(T).Name;
                using (var streamReader1 = new StreamReader(directoryPath + @"\Sample1.xml"))
                using (var streamReader2 = new StreamReader(directoryPath + @"\Sample2.xml"))
                using (var xmlReader ??? = XmlReader.Create(streamReader))
                {
                    ...
                }
            }

使用相同的根元素构建两个 xml 文件。

我的问题是,因为 xmlReader 创建函数只接受 1 个流阅读器。 以*的名义,我如何使用xml阅读器从2个xml中读取?

我是否将 2 个流合并为 1 并从第 1 位读取到最后 1 位,如果是,如何?

提前致谢,

蒙大拿州。

【问题讨论】:

  • 你不能按照你的要求去做。就是这么简单。如果您编辑问题以解释您的最终目标,我们可以给您一些建议。

标签: c# serialization


【解决方案1】:

我会这样做

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME1 = @"c:\temp\test.xml";
        const string FILENAME2 = @"c:\temp\test2.xml";
        static void Main(string[] args)
        {
            XDocument doc1 = XDocument.Load(FILENAME1);
            XElement root1 = (XElement)doc1.FirstNode;

            XDocument doc2 = XDocument.Load(FILENAME2);
            XElement root2 = (XElement)doc2.FirstNode;

            root1.Add(root2.Elements());
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多