Запись XML-файла с C# в определенную XML-структуру
Обычный способ, я пишу код для записи файла XML,
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create("Products.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("Product");
writer.WriteAttributeString("ID", "001");
writer.WriteAttributeString("Name", "Keyboard");
writer.WriteElementString("Price", "10.00");
writer.WriteStartElement("OtherDetails");
writer.WriteElementString("BrandName", "X Keyboard");
writer.WriteElementString("Manufacturer", "X Company");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
Но приведенный выше код дает мне другую структуру XML, Как кодировать, если мне нужен вывод, как показано ниже данной структуры,
<Books>
<Book ISBN="0553212419">
<title>Sherlock Holmes</title>
<author>Sir Arthur Conan Doyle</author>
</Book>
<Book ISBN="0743273567">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
</Book>
<Book ISBN="0684826976">
<title>Undaunted Courage</title>
<author>Stephen E. Ambrose</author>
</Book>
<Book ISBN="0743203178">
<title>Nothing Like It In the World</title>
<author>Stephen E. Ambrose</author>
</Book>
</Books>
Спасибо
2 ответа
Решение
Как уже было сказано, просто измените код, который вы уже должны написать правильные элементы.
XmlWriter writer = XmlWriter.Create(@"Products.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("Books");
writer.WriteStartElement("Book");
writer.WriteAttributeString("ISBN", "0553212419");
writer.WriteElementString("Title", "Sherlock Holmes");
writer.WriteElementString("Author", "Sir Arthur Conan Doyle");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
Вымойте, промойте, повторите. Я бы порекомендовал написать метод, чтобы добавить каждую книгу.
РЕДАКТИРОВАТЬ - метод написания книг
void WriteBookData(XmlWriter writer, string isbn, string title, string author)
{
writer.WriteStartElement("Book");
writer.WriteAttributeString("ISBN", isbn);
writer.WriteElementString("Title", title);
writer.WriteElementString("Author", author);
writer.WriteEndElement();
}
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(@"Products.xml", settings))
{
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("Books");
WriteBookData(writer, "0553212419", "Sherlock Holmes", "Sir Arthur Conan Doyle");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
}
Почему бы вам не использовать Linq для XML . Это довольно просто и очень легко понять
string filename = string.Empty;
XElement res= new XElement ("Books",new XElement ("Book",new XAttribute ("ISBN","="+055321212),
new XElement ("Title","Sherlock Homes"),
new XElement ("author","Sir Arthur Conan")
)
);
res.Save(filename);
вы можете использовать foreach look для хранения жестко закодированных значений в приведенных выше инструкциях