• <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++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

            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 夢在天涯 閱讀(738) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

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

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804303
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久精品国产亚洲av麻豆图片 | 99久久精品免费看国产一区二区三区| 四虎国产精品免费久久5151| 久久久久久一区国产精品| 美女久久久久久| 久久狠狠高潮亚洲精品| 久久强奷乱码老熟女网站| 99久久无色码中文字幕人妻| 伊人久久精品线影院| 国产69精品久久久久观看软件| 99久久人妻无码精品系列蜜桃| 久久天天躁狠狠躁夜夜2020| 久久亚洲春色中文字幕久久久| 久久久91精品国产一区二区三区 | 国产成人99久久亚洲综合精品| 久久精品人人做人人爽电影| 久久99热精品| 91精品国产综合久久四虎久久无码一级| 久久午夜综合久久| 97久久精品无码一区二区天美| 最新久久免费视频| 四虎影视久久久免费观看| 91精品国产91久久| 狠狠狠色丁香婷婷综合久久俺| 精品国产乱码久久久久久人妻| 久久久久人妻一区精品| 久久被窝电影亚洲爽爽爽| 久久国产精品无码一区二区三区| 久久综合亚洲色HEZYO社区 | 四虎国产精品成人免费久久| 狠狠人妻久久久久久综合| 精品九九久久国内精品| AV狠狠色丁香婷婷综合久久 | 久久精品中文字幕久久| 精品久久久久久中文字幕| 91精品国产色综合久久| 69SEX久久精品国产麻豆| 97久久精品无码一区二区| 国内精品久久九九国产精品| 久久精品一区二区国产| 777久久精品一区二区三区无码|