Home > Article > Backend Development > Easily process XML data in .NET Framework (5-1)
??Design the XmlReadWriter class
??As mentioned earlier, XML reader and Writer work independently: reader only reads, writer only writes. Suppose your application needs to handle a long XML document, and the document has unstable data. Reader provides a good way to read the content of the document. Writer, on the other hand, is a very useful tool for creating XML document fragments, but if you want it to be both readable and writable, then you have to use XMLDOM. If the actual XML document is very large, another title will appear. What title is it? Should we load all this XML document into memory and then read and write it later? Let's first look at how to build a hybrid stream analyzer for parsing large XML DOMs.
??Like a normal read-only operation, use an ordinary XML reader to access nodes sequentially. The difference is that you can use XML writer to change attribute values and node contents while reading. You use the reader to read each node in the source file, and the background writer creates a copy of the node. In this copy, you can add some new nodes, ignore or edit other nodes, and edit attribute values. When you're done making changes, you replace the old document with the new one.
??A simple and effective method is to copy the node object from the read-only stream to the write stream. This method can use two methods in the XmlTextWriter class: WriteAttributes method and WriteNode method. The WriteAttributes method reads all valid attributes of the node selected in the current reader, and then copies the attributes as a separate string to the current output stream. Similarly, the WriteNode method uses a similar method to handle other types of nodes except attribute nodes. The code snippet shown in Figure 10 demonstrates how to use the above two methods to create a copy of the source XML document and selectively modify certain nodes. The XML tree is accessed starting from the root of the tree, but only nodes of other types than attribute node types are output. You can integrate Reader and Writer in a new class and design a new interface so that it can read and write streams and access properties and nodes.
Figure 10 Using the WriteNode Method
XmlTextReader reader = new XmlTextReader(inputFile);
XmlTextWriter writer = new XmlTextWriter(outputFile);
//Configure reader and writer
writer.Formatting = Formatting.Indented;
reader.MoveToContent();
// Write root node
writer.WriteStartElement(reader.LocalName);
// Read and output every other node
int i=0;
while (reader.Read())
{
if (i % 2)
writer.WriteNode(reader, false);
i ;
}
// Close the root
writer.WriteEndElement ();
// Close reader and writer
writer.Close();
reader.Close();
?? My XmlTextReadWriter class is not persisted from the XmlReader or XmlWriter class. Instead, there are two other classes, one is a control class based on a read-only stream (stream), and the other is a control class based on a write-only stream. The method of the XmlTextReadWriter class uses the Reader object to read data and writes it to the Writer object. In order to adapt to different needs, the internal Reader and Writer objects are exposed through the read-only Reader and Writer properties. Figure 11 lists some methods of this class:
Figure 11 XmlTextReadWriter Class Methods
Method
Description
AddAttributeChange
Caches all the information needed to perform a change on a node attribute. processed during a successive call to WriteAttributes.
Read
Simple wrapper around the internal reader's Read method.
WriteAttributes
Specialized version of the writer's WriteAttributes method, writes out all the attributes for the given node, taking into account all the changes cached through the AddAttributeChange method.
WriteEndDocument
Terminates the current document in the writer and closes both the reader and the writer.
WriteStartDocument
Prepares the internal writer to output the document and add a default comment text and the standard XML prolog.
??This new class has a Read method, which is a simple encapsulation of Reader's read method. In addition, it provides WriterStartDocument and WriteEndDocument methods. They initialize/release (finalize) the internal Reader and writer objects respectively, and also handle all I/O operations. While reading the nodes in a loop, we can directly correct the nodes. For performance reasons, attributes must be modified first using the AddAttributeChange method. All modifications to a node's attributes will be stored in a temporary table. Finally, the modifications are submitted by calling the WriteAttribute method and the temporary table is cleared.
The above is the content of easily processing XML data (5-1) in .NET Framework. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!