私がここでやろうとしているのは、要素がXML文書に存在するかどうかを確認することです。存在する場合は、内部のテキストを変更します。それが存在しない場合、私はそれを作成し、それに適した内部テキストを作成したいと思います。しかし、要素が存在し、内部のテキストを変更しようとすると、それよりも短い何かにxmlファイル全体が書き換えられたように見えます。XML.Saveファイル作成の謎
マイコード:
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path);
XmlNodeList felement = xmldoc.GetElementsByTagName(Element);
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
if (felement.Count == 0)
{
XmlElement elmRoot = xmldoc.DocumentElement;
XmlElement xmlele = xmldoc.CreateElement(Element);
xmlele.AppendChild(xmldoc.CreateTextNode(data));
elmRoot.AppendChild(xmlele);
xmldoc.Save(fs);
}
else
{
felement[0].InnerText = data;
xmldoc.Save(fs);
}
fs.Close();
短い内部テキストを変更する前に、XMLファイル:
<?xml version="1.0" encoding="utf-8"?>
<MyXMLFile>
<Source>C:\Users\Dacto\Desktop\</Source>
<Destination>C:\Program Files\Adobe</Destination>
</MyXMLFile>
短い内部テキストの後:
<?xml version="1.0" encoding="utf-8"?>
<MyXMLFile>
<Source>C:\Users\Dacto\Desktop\Napster</Source>
<Destination>C:\Users</Destination>
</MyXMLFile>/MyXMLFile>
"余分な"/MyXMLFileを参照してください。 >何が起こっているの?
これは起こっているようですが、私はそれをFileMode.Truncateに変更しました。それは動作します: – Dacto
嬉しいです。ファイルが存在しない可能性がある場合、FileMode.Createは、ファイルがすでに存在するかどうかによって、ファイルを作成するか、または切り捨てるため、最善の策です。 –
それ以前のコードでは、パスが実際に存在するかどうかをチェックし、そうでなければパスを作成します。 – Dacto