2012-08-01 35 views
1

我想合并两个XML文档。第一种是具有默认值的模板,第二种具有缺少字段的结构。 我想加载这两个文件,并用第一个文件中给出的默认值填充第二个XML文件的缺失字段。 例如:模板化两个XML文件

DefaultConfig.xml:

<CollectionItem> 
    <Item> 
     <var1>10</var1> 
     <var2>20</var2> 
    </Item> 
</CollectionItem> 

Config1.xml:

<CollectionItem> 
    <Item> 
     <var1>5</var1> 
    </Item> 
    <Item> 
     <var2>5</var2> 
    </Item> 
</CollectionItem> 

结果,我想输出文件看起来像:

<CollectionItem> 
    <Item> 
     <var1>5</var1> 
     <var2>20</var2> 
    </Item> 
    <Item> 
     <var1>10</var> 
     <var2>5</var2> 
    </Item> 
</CollectionItem> 

此外,我想通用,如果我在节点项目中添加一个字段,我不想编码它只是在默认的XML文件中读取它。 感谢您的帮助!

回答

0

使用XElemnt类读取XML文件。 您使用方法Elements()获取子元素。每个元素都有一个属性“name”。 如果非默认元素没有默认元素所具有的字段 - 添加它与添加功能。

最后别忘了调用函数“save”。

+0

好吧,这是最简单的方法,我正在寻找一种更像“SQL”请求的“自动”方式......但是谢谢你,那确实是我的第一份草稿;-) – GuillaumeA 2013-01-09 03:03:44

0

好的,简单的接近,我只是想知道是否还没有一种方法来做到这一点。我知道两个数据集的合并函数,可以将结构与属性“转换”为一个元素或一个元素,并按照gicen方案属性合并。

如果两个文件都是探微一个文件这样的:

<CollectionItem> 
    <Item> 
     <Name>default</Name> 
     <var1>5</var1> 
     <var2>20</var2> 
    </Item> 
    <Item> 
     <Name>config1</Name> 
     <var1>10</var> 
    </Item> 
</CollectionItem> 

和反序列化时到一个类“CollectionItem”,我想填充其值加上我的第一个项目找到默认值的第二个项目,如果不给?在反序列化之后执行它非常简单,但有可能在反序列化中执行它。使用二进制文件,IOnDeseralizationCallback也很容易,但这个概念对于XML文件不存在...