1

2 つの XML ドキュメントをマージしようとしています。1 つ目はデフォルト値を持つ一種のテンプレートで、2 つ目は同じ構造でフィールドが欠落しています。両方のファイルをロードし、2 番目の 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>

さらに、ノード Item にフィールドを追加する場合、それをコード化するのではなく、デフォルトの XML ファイルで読み取ります。ご協力いただきありがとうございます !

4

2 に答える 2

0

わかりました、簡単なアプローチです。それを行う方法がまだないのではないかと思いました。2 つのデータセットのマージ機能を使用すると、要素に「変換」された属性を持つ構造、または gicen スキームに従って属性に要素をマージできることを知っています....

さらに、2 つのファイルが次のような 1 つのファイルである場合はどうなるでしょうか。

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

クラス「CollectionItem」への逆シリアル化中に、2番目のアイテムにその値と最初のアイテムで見つかったデフォルト値を入力したいのですが、指定されていませんか? デシリアライズ後に行うのは非常に簡単ですが、AT デシリアライズで行うことは可能ですか。バイナリ ファイルを使用すると、インターフェイス IOnDeseralizationCallback を使用することも簡単ですが、この概念は XML ファイルには存在しません...

于 2012-08-02T11:26:48.183 に答える
0

XElemntクラスを使用して XML ファイルを読み取ります。メソッド Elements() を使用して子要素を取得します。各要素にはプロパティ「名前」があります。デフォルト以外の要素に、デフォルト要素にあるフィールドがない場合は、Add 関数を使用して追加します。

最後に、関数「save」を呼び出すことを忘れないでください。

于 2012-08-01T17:56:55.300 に答える