ここでトリッキーな質問が来ます。
次のような MainFile.XML という 1 つのファイルを取得しました。
<xml>
<header>
<some></some>
<addThis></addThis>
</header>
<footer></footer>
<this>
<is>
<deep>
<like></like>
</deep>
</is>
</this>
<test></test>
<page></page>
<addThis></addThis>
もう 1 つのファイル、LangFile.XML は次のようになります。
<xml>
<header>
<some>English file</some>
</header>
<footer>Footer</footer>
<this>
<is>
<deep>
<like>Hey</like>
</deep>
</is>
</this>
<test>Something</test>
</xml>
LangFile.XML を更新して MainFile.XML と一致させたいのですが、すべての Text 値を LangFile に保持する必要があります。
更新後、LangFile を次のようにしたい: EXPECTED OUTPUT
<xml>
<header>
<some>English file</some>
<addThis></addThis>
</header>
<footer>Footer</footer>
<this>
<is>
<deep>
<like>Hey</like>
</deep>
</is>
</this>
<test>Something</test>
<page></page>
<addThis></addThis>
</xml>
この回答を見てきましたが、ファイルを更新して値を保持する必要があります... 2 つのテキスト ファイルを 1 行ずつ比較する
トリッキーな部分はネスティングです。1 レベルから X レベルの深さまで何でもかまいません...
私の問題は、ツリーを深くするときに行を行ごとに比較する方法がわからないことです。このようなことを試しましたが、立ち往生しています...特定の子孫を新しいリストに追加する方法がわかりません。
String directory = @"C:\Utv\XmlTest";
var mainFile = XDocument.Load(Path.Combine(directory, "MainFile.XML"));
var langFile = XDocument.Load(Path.Combine(directory, "LangFile.XML"));
//Get all descendant nodes
var mainFileDesc = mainFile.Root.Descendants().ToList();
var langFileDesc = langFile.Root.Descendants().ToList();
//Loop through the mainfile
for(var i = 0; i < mainFileDesc.Count(); i++)
{
var mainRow = mainFileDesc[i];
var langRow = langFileDesc[i];
//Compare the rows descendants, if not the same, add the mainRow to the langRow
if(mainRow.Descendants().Count() != langRow.Descendants().Count())
{
//Here I want to check if the mainRow != the langRow
//if not, add the mainRow to the langFile list
if(mainRow != langRow)
{
langFileDesc.Insert(i, mainRow);
}
}
}
現在、次のエラーが発生しています。
var langRow = langFileDesc[i];
Message Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
これは、リストの長さが同じではないためです。そのため、リストに追加する必要があります...