1

XML ファイルに新しい子を追加するコードをいくつか試しました。XmlDocument.Load(String filename) と XmlDocument.Load(FileStream fs) を使用すると、結果が異なることに気付きました。以下に、元の XML ファイル データを示します。

<?xml version="1.0" encoding="utf-8"?>
<grandparent>
    <parent>
        <child>
            <grandchild>some text here</grandchild>
        </child>
        <child>
            <grandchild>another text here</grandchild>
        </child>
    </parent>
</grandparent>

以下は、XmlDocument.Load(String filename) を使用して子要素を追加する C# コードを示しています。

XmlDocument doc = new XmlDocument();
doc.Load(filename);

XmlNode child= doc.CreateNode(XmlNodeType.Element, "child", null);
XmlNode grandchild = doc.CreateNode(XmlNodeType.Element, "grandchild", null);
grandchild.InnerText = "different text here";
child.AppendChild(grandchild);
doc.SelectSingleNode("//grandparent/parent").AppendChild(child);
doc.Save(filename);

以下に示すように、結果の XML ファイルは正常に機能しています。

<?xml version="1.0" encoding="utf-8"?>
<grandparent>
    <parent>
        <child>
            <grandchild>some text here</grandchild>
        </child>
        <child>
            <grandchild>another text here</grandchild>
        </child>
        <child>
            <grandchild>different text here</grandchild>
        </child>
    </parent>
</grandparent>

ただし、以下に示すように XmlDocument.Load(FileStream fs) を使用する場合

FileStream fs = new FileStream(filename, FileMode.Open)
XmlDocument doc = new XmlDocument();
doc.Load(fs);

XmlNode child= doc.CreateNode(XmlNodeType.Element, "child", null);
XmlNode grandchild = doc.CreateNode(XmlNodeType.Element, "grandchild", null);
grandchild.InnerText = "different text";
child.AppendChild(grandchild);
doc.SelectSingleNode("//grandparent/parent").AppendChild(child);
doc.Save(fs);
fs.Close();

結果の XML ファイルは非常に奇妙なものになります。以下に示すように、XML ファイル全体を再度複製するようなものです。

<?xml version="1.0" encoding="utf-8"?>
<grandparent>
    <parent>
        <child>
            <grandchild>some text here</grandchild>
        </child>
        <child>
            <grandchild>another text here</grandchild>
        </child>
    </parent>
</grandparent><?xml version="1.0" encoding="utf-8"?>
<grandparent>
    <parent>
        <child>
            <grandchild>some text here</grandchild>
        </child>
        <child>
            <grandchild>another text here</grandchild>
        </child>
        <child>
            <grandchild>different text here</grandchild>
        </child>
    </parent>
</grandparent>

誰かが理由を教えてもらえますか? 前もって感謝します。

4

1 に答える 1