たとえば、次の xml があるとします。
<CONFIGURATION>
<File>D:\Test\TestFolder\TestFolder1\TestFile.txt</File>
<Dir>D:\Test\TestFolder\TestFolder1\</Dir>
<File>D:\Test\TestFolder\TestFolder2\TestFile02.txt</File>
<File>D:\Test\TestFolder\TestFolder2\TestFile04.txt</File>
<Dir>D:\Test\TestFolder\TestFolder2\</Dir>
</CONFIGURATION>
そして、ファイルノードのみを含む新しいノードを作成します。また、ルート ノードはFilesという名前にする必要があります。このような xml は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Files>
<File>D:\Test\TestFolder\TestFolder1\TestFile.txt</File>
<File>D:\Test\TestFolder\TestFolder2\TestFile02.txt</File>
<File>D:\Test\TestFolder\TestFolder2\TestFile04.txt</File>
</Files>
次のコードはこれを行います。
XElement infile = XElement.Load("In.xml");
XElement outfile = new XElement("Files");
foreach (XElement x in infile.Elements("File"))
outfile.Add(x);
outfile.Save("Out.xml");
これは、LINQ To XML を使用して 1 つの xml ドキュメントから別の xml ドキュメントにノードを転送する方法の簡単な例です。これを使用することを検討してください。
あなたはそれを好きになるはずです。
編集
元の XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<abc>
<pdf>hhh</pdf>
</abc>
</root>
ユーザー入力:
abc#uuu#ttt
出力 XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<abc>
<pdf>hhh</pdf>
<uuu>ttt</uuu>
</abc>
</root>
コード:
string userinput = "abc#uuu#ttt";
XElement infile = XElement.Load("In.xml");
XElement temp = infile;
string[] commands = userinput.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < commands.Length; i++)
{
if (i + 1 == commands.Length)
temp.Value = commands[i];
else
{
if (temp.Element(commands[i]) == null)
temp.Add(new XElement(commands[i]));
temp = temp.Element(commands[i]);
}
}
infile.Save("Out.xml");