【问题标题】:Join two xml files using XPath query in C#在 C# 中使用 XPath 查询连接两个 xml 文件
【发布时间】:2015-07-31 03:07:04
【问题描述】:

我是 C# 新手,我有两个 xml 文件作为 XDocument 加载到我的程序中。我想找到一种方法来执行内部连接并将结果存储为新文件。我不确定如何使用 XPath 查询来实现这一点。

说这里是我的第一个 xml 文件:

<?xml version="1.0" encoding="utf-8"?>

<People>
  <Person>
    <ID> 1 </ID>
    <Gender> M </Gender>
  </Person>

  <Person>
    <ID> 2 </ID>
    <Gender> F </Gender>
  </Person>
</People>

这是我的第二个 xml 文件:

<?xml version="1.0" encoding="utf-8"?>

<PeopleDetail>
  <PersonDetail>
    <ID> 1 </ID>
    <Name> ABC </Name>
  </PersonDetail>

  <PersonDetail>
    <ID> 2 </ID>
    <Name> DEF </Name>
  </PersonDetail>
</PeopleDetail>

而我想得到的是这样的:

<Output>
  <Join>
    <Person>
      <ID> 1 </ID>
      <Gender> M </Gender>
    </Person>
    <PersonDetail>
      <ID> 1 </ID>
      <Name> ABC </Name>
    </PersonDetail>
  </Join> 

  <Join>
    <Person>
      <ID> 2 </ID>
      <Gender> F </Gender>
    </Person>
    <PersonDetail>
      <ID> 2 </ID>
      <Name> DEF </Name>
    </PersonDetail>
  </Join> 
</Output>

使用 XDocument.Load() 方法将这两个文件加载到我的程序中:

var doc1 = XDocument.Load("first.xml");
var doc2 = XDocument.Load("second.xml");

那么谁能告诉我如何通过“ID”执行这种内部连接?

谢谢

【问题讨论】:

  • 请编辑您的问题以描述您尝试过的内容。

标签: c# xml xpath


【解决方案1】:

我不确定 XPath 在这里对您有多大用处,但您可以使用 LINQ 进行简单的连接并创建一个包含这些元素的新文档。为了清楚起见,我将doc1doc2 重命名为peopledetails

var joins = from person in people.Descendants("Person")
            join detail in details.Descendants("PersonDetail")
                on (int)person.Element("ID") equals (int)detail.Element("ID")
            select new XElement("Join", person, detail);

var output = new XDocument(
    new XElement("Output",
        joins
        )
    );

您可以在此处查看工作演示:https://dotnetfiddle.net/HP5VtD

【讨论】:

  • 谢谢~ 很抱歉造成混乱,在上面的例子中它与 XPath 无关。但我确实在我的实际程序中使用了 XPathSelectElements() 来仅获取所需的数据。所以我最终做的是这样的事情,而且效果很好:来自 doc1.XPathSelectElements("query goes here") 中的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多