0
XmlTextReader myReader = new XmlTextReader("abc.xml");
XmlDocument mySourceDoc = new XmlDocument();
mySourceDoc.Load(myReader);
myReader.Close();

myReader = new XmlTextReader("pqr.xml");
XmlDocument myDestDoc = new XmlDocument();
myDestDoc.Load(myReader);
myReader.Close();

XmlNode rootDest = myDestDoc["root node"];
XmlElement nodeOrig = (XmlElement)mySourceDoc["root node"].ChildNodes[0];
XmlNode nodeDest = myDestDoc.ImportNode(nodeOrig, true);

try
{
    rootDest.AppendChild(nodeDest);
}
catch (Exception ex)
{
    MessageBox.Show("" + ex);
}
XmlTextWriter myWriter = new XmlTextWriter("pqr.xml", Encoding.UTF8);
myWriter.Formatting = Formatting.Indented;

myDestDoc.WriteTo(myWriter);
myWriter.Close();

上記のコードは、ノードをルート ノードの子として挿入する必要がある場合にうまく機能しますが、他のノードの子としてノードを挿入したいのですが、どうすればよいですか?

4

1 に答える 1

0

たとえば、次の 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");
于 2012-09-10T04:48:11.830 に答える