【问题标题】:How to replace sub elements in xml files using c#如何使用c#替换xml文件中的子元素
【发布时间】:2015-10-23 17:56:30
【问题描述】:

我有 2 个 xml 文件:

文件 1

<xml version.....> 
  <System>
    <General>
      <Instrument>
        <Specific>
          <Name>...</Name>
        </Specific>
      <Instrument>
    </General>
  <System>

文件 2

<System>
  <Specific>
    <Name>...</Name>
    <age>...</age>
    ....
  </Specific>
<System>

文件 1 在特定元素下只有一个条目,文件 2 在特定元素下有多个条目。我需要将文件 1 中特定下的所有条目替换为文件 2 中特定下的条目。

这是如何在 c# 中完成的,使用 System.Xml.Linq 或 System.Xml???

【问题讨论】:

  • 欢迎来到stackoverflow!该站点有助于解决您的代码问题。当您得到与预期不同的结果或遇到错误时,您应该在此处发布您的代码。您还应该描述您有什么结果和预期结果和/或提供错误详情。之后,该社区将帮助您解决问题,并且(有时)会给您一些指导。这就是stackoverflow的工作原理。如您所见,您的问题没有所有适当的信息。如果您想获得帮助,请编辑您的问题并添加包含其他所需信息的代码。
  • 你可以看看LINQ to XML。但您应该先尝试一下,然后再请 SO 社区为您解决。

标签: c# xml linq system.xml


【解决方案1】:

美好的一天。

您可以使用 LinqToXml 迭代地将节点从一个元素添加到另一个元素。

using System.Xml.Linq;

namespace XmlReplacer
{
    class Program
    {
        static void Main(string[] args)
        {
            var doc1 = XDocument.Load(@"d:\temp\file1.xml");                     
            var doc2 = XDocument.Load(@"d:\temp\file2.xml");
            var specElement1 = doc1.Root.Element("General").Element("Instrument").Element("Specific");
            var specElement2 = doc2.Root.Element("Specific");

            specElement1.RemoveAll();

            foreach (var xElement in specElement2.Elements())
            {
                specElement1.Add(xElement);
            }
            doc1.Save(@"d:\temp\file3.xml");
        }
    }
}

结果是file3.xml:

<?xml version="1.0" encoding="utf-8"?>
<System>
    <General>
        <Instrument>
            <Specific>
                <Name>Test2</Name>
                <Age>10</Age>
            </Specific>
        </Instrument>
    </General>
</System>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多