Visual C++ .NET/XML/XmlWriter
Содержание
Output xml start element and end element
<source lang="csharp">
- include "stdafx.h"
- using <system.xml.dll>
using namespace System; using namespace System::Xml; void main() {
XmlReader ^reader; XmlWriter ^writer; try { reader = XmlReader::Create("a.xml"); XmlWriterSettings ^settings = gcnew XmlWriterSettings(); settings->Indent = true; settings->IndentChars = (" "); writer = XmlWriter::Create("New.xml", settings); while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Comment: writer->WriteComment(reader->Value); break; case XmlNodeType::Element: writer->WriteStartElement(reader->Name); writer->WriteAttributes(reader, false); if (reader->IsEmptyElement) writer->WriteEndElement(); break; case XmlNodeType::EndElement: writer->WriteEndElement(); if (reader->Name->Equals("Name")) { writer->WriteStartElement("A"); writer->WriteString("False"); writer->WriteEndElement(); } break; case XmlNodeType::Text: writer->WriteString(reader->Value); break; case XmlNodeType::XmlDeclaration: writer->WriteStartDocument(); break; } } writer->Flush(); } catch (Exception ^e) { Console::WriteLine("XML Update Aborted -- {0}", e->Message); } finally { if (writer->WriteState != WriteState::Closed) { writer->Close(); } if (reader->ReadState != ReadState::Closed) { reader->Close(); } }
}
</source>
Output xml with indent
<source lang="csharp">
- include "stdafx.h"
- using <system.xml.dll>
using namespace System; using namespace System::Xml; void main() {
XmlReader ^reader; XmlWriter ^writer; try { reader = XmlReader::Create("a.xml"); XmlWriterSettings ^settings = gcnew XmlWriterSettings(); settings->Indent = true; settings->IndentChars = (" "); writer = XmlWriter::Create("New.xml", settings); while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Comment: writer->WriteComment(reader->Value); break; case XmlNodeType::Element: writer->WriteStartElement(reader->Name); writer->WriteAttributes(reader, false); if (reader->IsEmptyElement) writer->WriteEndElement(); break; case XmlNodeType::EndElement: writer->WriteEndElement(); if (reader->Name->Equals("Name")) { writer->WriteStartElement("A"); writer->WriteString("False"); writer->WriteEndElement(); } break; case XmlNodeType::Text: writer->WriteString(reader->Value); break; case XmlNodeType::XmlDeclaration: writer->WriteStartDocument(); break; } } writer->Flush(); } catch (Exception ^e) { Console::WriteLine("XML Update Aborted -- {0}", e->Message); } finally { if (writer->WriteState != WriteState::Closed) { writer->Close(); } if (reader->ReadState != ReadState::Closed) { reader->Close(); } }
}
</source>
Update XML
<source lang="csharp">
- include "stdafx.h"
- using <system.xml.dll>
using namespace System; using namespace System::Xml; void main() {
XmlReader ^reader; XmlWriter ^writer; try { reader = XmlReader::Create("a.xml"); XmlWriterSettings ^settings = gcnew XmlWriterSettings(); settings->Indent = true; settings->IndentChars = (" "); writer = XmlWriter::Create("New.xml", settings); while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Comment: writer->WriteComment(reader->Value); break; case XmlNodeType::Element: writer->WriteStartElement(reader->Name); writer->WriteAttributes(reader, false); if (reader->IsEmptyElement) writer->WriteEndElement(); break; case XmlNodeType::EndElement: writer->WriteEndElement(); if (reader->Name->Equals("Name")) { writer->WriteStartElement("A"); writer->WriteString("False"); writer->WriteEndElement(); } break; case XmlNodeType::Text: writer->WriteString(reader->Value); break; case XmlNodeType::XmlDeclaration: writer->WriteStartDocument(); break; } } writer->Flush(); } catch (Exception ^e) { Console::WriteLine("XML Update Aborted -- {0}", e->Message); } finally { if (writer->WriteState != WriteState::Closed) { writer->Close(); } if (reader->ReadState != ReadState::Closed) { reader->Close(); } }
}
</source>
Write XML out
<source lang="csharp">
- include "stdafx.h"
- using <system.xml.dll>
using namespace System; using namespace System::Xml; void main() {
XmlWriter ^writer; try { XmlWriterSettings ^settings = gcnew XmlWriterSettings(); settings->Indent = true; settings->IndentChars = (" "); settings->NewLineOnAttributes = true; writer = XmlWriter::Create("G.xml", settings); writer->WriteStartDocument(); writer->WriteStartElement("M"); writer->WriteComment("P"); writer->WriteStartElement("M"); writer->WriteStartElement("N"); writer->WriteString("G"); writer->WriteEndElement(); writer->WriteStartElement("H"); writer->WriteAttributeString("D", "1d8"); writer->WriteAttributeString("D1", "4"); writer->WriteEndElement(); writer->WriteEndDocument(); writer->Flush(); } catch (Exception ^e) { Console::WriteLine("XML Writer Aborted -- {0}", e->Message); } finally { if (writer->WriteState != WriteState::Closed) { writer->Close(); } }
}
</source>