• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            read and write XMl in 2 means (XML一)

            Read and Write XML Without Loading an Entire Document into Memory

            Solution

            To write XML, create an XmlTextWriter that wraps a stream and use Write methods (such as WriteStartElement and WriteEndElement). To read XML, create an XmlTextReader that wraps a stream and call Read to move from node to node.


            To write XML to any stream, you can use the streamlined XmlTextWriter. It provides Write methods that write one node at a time. These include

            • WriteStartDocument, which writes the document prologue, and WriteEndDocument, which closes any open elements at the end of the document.

            • WriteStartElement, which writes an opening tag for the element you specify. You can then add more elements nested inside this element, or you can call WriteEndElement to write the closing tag.

            • WriteElementString, which writes an entire element, with an opening tag, a closing tag, and text content.

            • WriteAttributeString, which writes an entire attribute for the nearest open element, with a name and value.

            To read the XML, you use the Read method of the XmlTextReader. This method advances the reader to the next node, and returns true. If no more nodes can be found, it returns false. You can retrieve information about the current node through XmlTextReader properties, including its Name, Value, and NodeType.


            EX:

            using System;
            using System.Xml;
            using System.IO;
            using System.Text;
            
            public class ReadWriteXml {
            
                private static void Main() {
            
                    // Create the file and writer.
                    FileStream fs = new FileStream("products.xml", FileMode.Create);
                    XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
            
                    // Start the document.
                    w.WriteStartDocument();
                    w.WriteStartElement("products");
            
                    // Write a product.
                    w.WriteStartElement("product");
                    w.WriteAttributeString("id", "1001");
                    w.WriteElementString("productName", "Gourmet Coffee");
                    w.WriteElementString("productPrice", "0.99");
                    w.WriteEndElement();
            
                    // Write another product.
                    w.WriteStartElement("product");
                    w.WriteAttributeString("id", "1002");
                    w.WriteElementString("productName", "Blue China Tea Pot");
                    w.WriteElementString("productPrice", "102.99");
                    w.WriteEndElement();
            
                    // End the document.
                    w.WriteEndElement();
                    w.WriteEndDocument();
                    w.Flush();
                    fs.Close();
            
                    Console.WriteLine("Document created. " +
                     "Press Enter to read the document.");
                    Console.ReadLine();
            
                    fs = new FileStream("products.xml", FileMode.Open);
                    XmlTextReader r = new XmlTextReader(fs);
            
                    // Read all nodes.
                    while (r.Read()) {
             
                       if (r.NodeType == XmlNodeType.Element) {
            
                            Console.WriteLine();
                            Console.WriteLine("<" + r.Name + ">");
            
                            if (r.HasAttributes) {
            
                                for (int i = 0; i < r.AttributeCount; i++) {
                                    Console.WriteLine("\tATTRIBUTE: " +
                                      r.GetAttribute(i));
                                }
                            }
                        }else if (r.NodeType == XmlNodeType.Text) {
                            Console.WriteLine("\tVALUE: " + r.Value);
                        }
                    }
                    Console.ReadLine();
                }
            }

            -----------------------------------------------------------
            Insert Nodes in an XML Document





            Solution

            Create the node using the appropriate XmlDocument method (such as CreateElement, CreateAttribute,
            CreateNode, and so on). Then insert it using the appropriate XmlNode method (such as InsertAfter,
            InsertBefore, or AppendChild).


            The following example demonstrates this technique by programmatically creating a new XML document.

            using System;
            using System.Xml;
            
            public class GenerateXml {
            
                private static void Main() {
            
                    // Create a new, empty document.
                    XmlDocument doc = new XmlDocument();
                    XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                    doc.AppendChild(docNode);
            
                    // Create and insert a new element.
                    XmlNode productsNode = doc.CreateElement("products");
                    doc.AppendChild(productsNode);
            
                    // Create a nested element (with an attribute).
                    XmlNode productNode = doc.CreateElement("product");
                    XmlAttribute productAttribute = doc.CreateAttribute("id");
                    productAttribute.Value = "1001";
                    productNode.Attributes.Append(productAttribute);
                    productsNode.AppendChild(productNode);
            
                    // Create and add the sub-elements for this product node
                    // (with contained text data).
                    XmlNode nameNode = doc.CreateElement("productName");
                    nameNode.AppendChild(doc.CreateTextNode("Gourmet Coffee"));
                    productNode.AppendChild(nameNode);
                    XmlNode priceNode = doc.CreateElement("productPrice");
                    priceNode.AppendChild(doc.CreateTextNode("0.99"));
                    productNode.AppendChild(priceNode);
            
                    // Create and add another product node.
                    productNode = doc.CreateElement("product");
                    productAttribute = doc.CreateAttribute("id");
                    productAttribute.Value = "1002";
                    productNode.Attributes.Append(productAttribute);
                    productsNode.AppendChild(productNode);
                    nameNode = doc.CreateElement("productName");
                    nameNode.AppendChild(doc.CreateTextNode("Blue China Tea Pot"));
                    productNode.AppendChild(nameNode);
                    priceNode = doc.CreateElement("productPrice");
                    priceNode.AppendChild(doc.CreateTextNode("102.99"));
                    productNode.AppendChild(priceNode);
            
                    // Save the document (to the Console window rather than a file).
                    doc.Save(Console.Out);
                    Console.ReadLine();
                }
            }

            The generated document looks like this:

            <?xml version="1.0" encoding="UTF-8"?>
            <products>
              <product id="1001">
                <productName>Gourmet Coffee</productName>
                <productPrice>0.99</productPrice>
              </product>
              <product id="1002">
                <productName>Blue China Tea Pot</productName>
                <productPrice>102.99</productPrice>
              </product>
            </products>
            -----------------------------------------------------------
            ------
            Quickly Append Nodes in an XML Document

            Solution

            Create a helper function that accepts a tag name and content and can generate the entire element
            at once. Alternatively, use the XmlDocument.CloneNode method to copy branches of an XmlDocument.


            Here's an example of one such helper class:

            using System;
            using System.Xml;
            
            public class XmlHelper {
            
                public static XmlNode AddElement(string tagName, 
                  string textContent, XmlNode parent) {
            
                    XmlNode node = parent.OwnerDocument.CreateElement(tagName);
                    parent.AppendChild(node);
            
                    if (textContent != null) {
            
                        XmlNode content;
                        content = parent.OwnerDocument.CreateTextNode(textContent);
                        node.AppendChild(content);
                    }
                    return node;
                }
            
                public static XmlNode AddAttribute(string attributeName,
                  string textContent, XmlNode parent) {
            
                    XmlAttribute attribute;
                    attribute = parent.OwnerDocument.CreateAttribute(attributeName);
                    attribute.Value = textContent;
                    parent.Attributes.Append(attribute);
            
                    return attribute;
                }
            }

            You can now condense the XML-generating code from recipe 5.2 with the simpler syntax shown here:

            public class GenerateXml {
            
                private static void Main() {
            
                    // Create the basic document.
                    XmlDocument doc = new XmlDocument();
                    XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                    doc.AppendChild(docNode);
                    XmlNode products = doc.CreateElement("products");
                    doc.AppendChild(products);
            
                    // Add two products.
                    XmlNode product = XmlHelper.AddElement("product", null, products);
                    XmlHelper.AddAttribute("id", "1001", product);
                    XmlHelper.AddElement("productName", "Gourmet Coffee", product);
                    XmlHelper.AddElement("productPrice", "0.99", product);
            
                    product = XmlHelper.AddElement("product", null, products);
                    XmlHelper.AddAttribute("id", "1002", product);
                    XmlHelper.AddElement("productName", "Blue China Tea Pot", product);
                    XmlHelper.AddElement("productPrice", "102.99", product);
            
                    // Save the document (to the Console window rather than a file).
                    doc.Save(Console.Out);
                    Console.ReadLine();
                }
            }

            Alternatively, you might want to take the helper methods such as AddAttribute and AddElement and
            make them instance methods in a custom class you derive from XmlDocument.

            Another approach to simplifying writing XML is to duplicate nodes using the XmlNode.CloneNode
            method. CloneNode accepts a Boolean deep parameter. If you supply true, CloneNode will duplicate
            the entire branch, with all nested nodes.

            Here's an example that creates a new product node by copying the first node.

            // (Add first product node.)
            
            // Create a new element based on an existing product.
            product = product.CloneNode(true);
            
            // Modify the node data.
            product.Attributes[0].Value = "1002";
            product.ChildNodes[0].ChildNodes[0].Value = "Blue China Tea Pot";
            product.ChildNodes[1].ChildNodes[0].Value = "102.99";
            
            // Add the new element.
            products.AppendChild(product);

            Notice that in this case, certain assumptions are being made about the existing nodes (for example,
            that the first child in the item node is always the name, and the second child is always the
            price). If this assumption isn't guaranteed to be true, you might need to examine the node name
            programmatically.










            posted on 2005-11-23 18:09 夢在天涯 閱讀(741) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1808585
            • 排名 - 5

            最新評論

            閱讀排行榜

            日韩欧美亚洲综合久久 | 99久久成人国产精品免费| 久久久久高潮综合影院| 欧美午夜精品久久久久免费视| 国产欧美久久久精品| 亚洲欧美成人久久综合中文网 | 久久久国产精品网站| 99久久精品免费国产大片| 久久夜色精品国产www| 香蕉aa三级久久毛片| 伊人久久综在合线亚洲2019 | 久久亚洲av无码精品浪潮| 一本色道久久HEZYO无码| 99久久精品国产一区二区三区| 97精品伊人久久久大香线蕉| 国产成人AV综合久久| 久久午夜无码鲁丝片| 国内精品久久国产| 久久综合色区| 99久久国产免费福利| 国产精品久久午夜夜伦鲁鲁| 国产美女亚洲精品久久久综合| 久久九九久精品国产免费直播| 久久精品国产亚洲AV无码娇色| 久久精品国产精品亚洲精品| 久久亚洲中文字幕精品一区| 国产精品久久久久久久久久免费| 久久精品无码午夜福利理论片 | 久久午夜无码鲁丝片秋霞| 欧美久久综合九色综合| 中文精品久久久久国产网址| 2021精品国产综合久久| 久久66热人妻偷产精品9| 日产精品久久久久久久| 亚洲午夜久久久久久久久电影网| 久久亚洲精品无码aⅴ大香| 无码任你躁久久久久久老妇| 亚洲欧美日韩精品久久亚洲区 | 亚洲午夜久久久久久久久电影网 | 久久男人AV资源网站| 香蕉久久影院|