Изменить существующий контент XML в С#
Назначение: Я планирую создать XML файл с помощью XmlTextWriter и изменить/обновить существующий контент с помощью XmlNode SelectSingleNode(), node.ChildNode [?]. InnerText = someting и т.д.
После создания XML файла с XmlTextWriter, как показано ниже.
XmlTextWriter textWriter = new XmlTextWriter("D:\\learning\\cs\\myTest.xml", System.Text.Encoding.UTF8);
Я практиковал приведенный ниже код. Но мне не удалось сохранить файл XML.
XmlDocument doc = new XmlDocument();
doc.Load("D:\\learning\\cs\\myTest.xml");
XmlNode root = doc.DocumentElement;
XmlNode myNode;
myNode= root.SelectSingleNode("descendant::books");
....
textWriter.Close();
doc.Save("D:\\learning\\cs\\myTest.xml");
Я обнаружил, что это нехорошо производить, как мой путь.
Есть ли какие-либо предложения по этому поводу?
Я не совсем понимаю понятия и использование XmlTextWriter и XmlNode в том же проекте.
Спасибо за чтение и ответы.
Ответы
Ответ 1
Ну, если вы хотите обновить node в XML, то XmlDocument
в порядке - вам не нужно использовать XmlTextWriter
.
XmlDocument doc = new XmlDocument();
doc.Load("D:\\build.xml");
XmlNode root = doc.DocumentElement;
XmlNode myNode = root.SelectSingleNode("descendant::books");
myNode.Value = "blabla";
doc.Save("D:\\build.xml");
Ответ 2
Использование LINQ для xml, если вы используете фреймворк 3.5
using System.Xml.Linq;
XDocument xmlFile = XDocument.Load("books.xml");
var query = from c in xmlFile.Elements("catalog").Elements("book")
select c;
foreach (XElement book in query)
{
book.Attribute("attr1").Value = "MyNewValue";
}
xmlFile.Save("books.xml");
Ответ 3
Формирование XML файла
XmlTextWriter xmlw = new XmlTextWriter(@"C:\WINDOWS\Temp\exm.xml",System.Text.Encoding.UTF8);
xmlw.WriteStartDocument();
xmlw.WriteStartElement("examtimes");
xmlw.WriteStartElement("Starttime");
xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
xmlw.WriteEndElement();
xmlw.WriteStartElement("Changetime");
xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
xmlw.WriteEndElement();
xmlw.WriteStartElement("Endtime");
xmlw.WriteString(DateTime.Now.AddHours(1).ToString());
xmlw.WriteEndElement();
xmlw.WriteEndElement();
xmlw.WriteEndDocument();
xmlw.Close();
Для редактирования узлов Xml используйте приведенный ниже код
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\WINDOWS\Temp\exm.xml");
XmlNode root = doc.DocumentElement["Starttime"];
root.FirstChild.InnerText = "First";
XmlNode root1 = doc.DocumentElement["Changetime"];
root1.FirstChild.InnerText = "Second";
doc.Save(@"C:\WINDOWS\Temp\exm.xml");
Попробуйте это. Это код С#.
Ответ 4
XmlTextWriter обычно используется для создания (не обновления) содержимого XML. Когда вы загружаете xml файл в XmlDocument, вам не нужен отдельный сценарий.
Просто обновите node, который вы выбрали, и .Save(), что XmlDocument.