合并两个XML文件,这些文件具有一对多关系C#

伊鲁鲁(Isuru Siriwardana)

我有两个XML文件:1.合同

<?xml version="1.0" encoding="UTF-8"?>
<File>
   <Contract>
      <ContractNo>1</ContractNo>
   </Contract>
   <Contract>
      <ContractNo>2</ContractNo>
   </Contract>
</File>

2.资产

<?xml version="1.0" encoding="UTF-8"?>
<File>
   <Asset>
      <ContractNo>1</ContractNo>
      <SomeData>XXXX</SomeData>
      <SomeData2>XXXX</SomeData2>
   </Asset>
   <Asset>
      <ContractNo>1</ContractNo>
      <SomeData>YYYY</SomeData>
      <SomeData2>YYYY</SomeData2>
   </Asset>
   <Asset>
      <ContractNo>2</ContractNo>
      <SomeData>ZZZZ</SomeData>
      <SomeData>ZZZZ</SomeData>
   </Asset>
</File>

合同可能具有一项或多项资产。XML文件由合同编号映射。我将合并这两个文件并创建以下xml

<?xml version="1.0" encoding="UTF-8"?>
<File>
   <Contract>
      <ContractNo>1</ContractNo>
      <Asset>
         <SomeData>XXXX</SomeData>
         <SomeData2>XXXX</SomeData2>
      </Asset>
      <Asset>
         <SomeData>YYYY</SomeData>
         <SomeData2>YYYY</SomeData2>
      </Asset>
   </Contract>
   <Contract>
      <ContractNo>2</ContractNo>
      <Asset>
         <SomeData>ZZZZ</SomeData>
         <SomeData2>ZZZZ</SomeData2>
      </Asset>
   </Contract>
</File>

我的方法是迭代合约xml的每个合约并找到合约编号,然后迭代资产xml并找到上述合约的资产节点并将它们合并到合约xml中

XmlNodeList contractsNodeList = contractsDocument.GetElementsByTagName("Contract");
string contractNumber;
foreach (XmlNode contractNode in contractsNodeList)
{
    //get the contract number
    contractNumber = contractNode.SelectSingleNode("ContractNo").InnerText;

    if (!String.IsNullOrEmpty(contractNumber))
    {
        XmlNodeList assetsNodeList = assetsDocument.GetElementsByTagName("Asset");
        foreach (XmlNode assetNode in assetsNodeList)
        {
            //checking whether the current asset node has the current contract number 
            if (assetNode.ChildNodes[0].InnerText == contractNumber)
            {
                //remove the contract number of the asset node
                assetNode.RemoveChild(assetNode.ChildNodes[0]);
                //append the asset element to the contract xml
                contractNode.AppendChild(contractNode.OwnerDocument.ImportNode(assetNode, true));
            }
        }
    }
}

此代码有效并生成所需的xml。但是效率不高。我在使用XML方面没有太多经验。请让我知道其他方法。谢谢!

乔恩·斯基特

我将亲自阅读资产,然后填充ILookup<int, XElement>和删除ContractNo元素(因为在LINQ to XML中它稍微简单一些)。然后阅读合同,从字典中填充资产。就像是:

XDocument assets = XDocument.Load("assets.xml");
var lookup = assets.Root.Elements("Asset")
                        .ToLookup(x => (int) x.Element("ContractNo"));
assets.Root.Elements("Asset").Elements("ContractNo").Remove();

XDocument contracts = XDocument.Load("contracts.xml");
foreach (var contract in contracts.Root.Elements("Contract").ToList())
{
    var id = (int) contract.Element("ContractNo");
    contract.Add(lookup[id]);
}
contracts.Save("results.xml");

请注意,这不会检测没有任何资产的合同-它们将照原样保留。

所有这些都可以在“旧” XmlDocumentAPI中完成,但是LINQ to XML确实使它变得更加简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并两个XML文件,这些文件具有一对多关系C#

来自分类Dev

如何在Rails中合并具有一对多关系的两个模型?

来自分类Dev

如何合并具有一对多关系的两个表

来自分类Dev

在两个表之间具有2个一对多关系是否可以接受?

来自分类Dev

在两个表之间具有2个一对多关系是否可以接受?

来自分类Dev

在Grails中有两个具有一对多关系的实体

来自分类Dev

NSPredicate获取具有两个一对多关系的实体

来自分类Dev

查询具有一对多关系的两个表

来自分类Dev

尝试从具有一对多关系的两个表中插入select

来自分类Dev

插入具有一对多关系的新实体,而不在两个表中都创建记录

来自分类Dev

如何使用实体框架代码优先在两个实体之间具有多个一对多关系

来自分类Dev

插入具有一对多关系的新实体,而不在两个表中都创建记录

来自分类Dev

从具有一对多关系的两个表中获取数据的最佳方法是什么?

来自分类Dev

具有一对多关系的HasManyThrough

来自分类Dev

JPA:如何保存具有一对一关系的两个实体?

来自分类Dev

如何使用Hibernate保存具有一对一关系的两个类?

来自分类Dev

如何修复一侧有两个相同类型实体的一对多关系

来自分类Dev

在c#中合并两个具有相同结构的xml的属性

来自分类Dev

C#一对多关系

来自分类Dev

SQLite-Net Extension两个实体之间的一对一关系和一对多关系

来自分类Dev

如何使用LINQ C#合并和更新两个xml文件

来自分类Dev

在C#中合并两个XML文件,其中标签ID相同

来自分类Dev

合并具有两个公共字段的两个文件

来自分类Dev

将两个文件合并为具有合并列的单个文件

来自分类Dev

同一张表中的两个一对多关系

来自分类Dev

简单的laravel一对多关系-从两个表中获取结果

来自分类Dev

将表联接到SQL Server中的两个一对多关系表

来自分类Dev

简单的laravel一对多关系-从两个表中获取结果

来自分类Dev

Ruby-On-Rails中的两个一对多关系

Related 相关文章

  1. 1

    合并两个XML文件,这些文件具有一对多关系C#

  2. 2

    如何在Rails中合并具有一对多关系的两个模型?

  3. 3

    如何合并具有一对多关系的两个表

  4. 4

    在两个表之间具有2个一对多关系是否可以接受?

  5. 5

    在两个表之间具有2个一对多关系是否可以接受?

  6. 6

    在Grails中有两个具有一对多关系的实体

  7. 7

    NSPredicate获取具有两个一对多关系的实体

  8. 8

    查询具有一对多关系的两个表

  9. 9

    尝试从具有一对多关系的两个表中插入select

  10. 10

    插入具有一对多关系的新实体,而不在两个表中都创建记录

  11. 11

    如何使用实体框架代码优先在两个实体之间具有多个一对多关系

  12. 12

    插入具有一对多关系的新实体,而不在两个表中都创建记录

  13. 13

    从具有一对多关系的两个表中获取数据的最佳方法是什么?

  14. 14

    具有一对多关系的HasManyThrough

  15. 15

    JPA:如何保存具有一对一关系的两个实体?

  16. 16

    如何使用Hibernate保存具有一对一关系的两个类?

  17. 17

    如何修复一侧有两个相同类型实体的一对多关系

  18. 18

    在c#中合并两个具有相同结构的xml的属性

  19. 19

    C#一对多关系

  20. 20

    SQLite-Net Extension两个实体之间的一对一关系和一对多关系

  21. 21

    如何使用LINQ C#合并和更新两个xml文件

  22. 22

    在C#中合并两个XML文件,其中标签ID相同

  23. 23

    合并具有两个公共字段的两个文件

  24. 24

    将两个文件合并为具有合并列的单个文件

  25. 25

    同一张表中的两个一对多关系

  26. 26

    简单的laravel一对多关系-从两个表中获取结果

  27. 27

    将表联接到SQL Server中的两个一对多关系表

  28. 28

    简单的laravel一对多关系-从两个表中获取结果

  29. 29

    Ruby-On-Rails中的两个一对多关系

热门标签

归档