Csharp/C Sharp/XML/Node Type

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Read XML data from xml file: Node type, name

<source lang="csharp"> using System; using System.IO; using System.Xml;

 class TestXMLReader
 {
   static void Main(string[] args)
   {
     TestXMLReader tstObj = new TestXMLReader();
     StreamReader myStream = new StreamReader("books.xml");
     XmlTextReader xmlTxtRdr = new XmlTextReader(myStream);
     while(xmlTxtRdr.Read())
     {
       if(xmlTxtRdr.NodeType == XmlNodeType.Element 
         && xmlTxtRdr.Name == "A")
       {
         tstObj.ProcessMyDocument(xmlTxtRdr);
       }
     }
   }
   public void ProcessMyDocument(XmlTextReader reader)
   {
     Console.WriteLine("Start processing:" + reader.GetAttribute("property"));
     while(!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "B")
       && reader.Read()) {
       if(reader.NodeType == XmlNodeType.Element && reader.Name == "C") {
         Console.WriteLine("itemcode:" + reader.GetAttribute("c"));
       }
     }
   }
 }

/* <books>

 <A property="a">
   text
   <C c="aaa" >textg</C>
   <D>99999</D>
 </A>

</books>

  • /
      </source>


XmlNodeType Text

<source lang="csharp">

using System; using System.Xml; using System.IO; using System.Text; class MainClass {

   private static void Main() {
       FileStream fs = new FileStream("products.xml", FileMode.Create);
       XmlWriter w = XmlWriter.Create(fs);
       w.WriteStartDocument();
       w.WriteStartElement("products");
       w.WriteStartElement("product");
       w.WriteAttributeString("id", "1001");
       w.WriteElementString("productName", "Gourmet Coffee");
       w.WriteElementString("productPrice", "0.99");
       w.WriteEndElement();
       w.WriteStartElement("product");
       w.WriteAttributeString("id", "1002");
       w.WriteElementString("productName", "Blue China Tea Pot");
       w.WriteElementString("productPrice", "102.99");
       w.WriteEndElement();
       w.WriteEndElement();
       w.WriteEndDocument();
       w.Flush();
       fs.Close();
       fs = new FileStream("products.xml", FileMode.Open);
       XmlReader r = XmlReader.Create(fs);
       while (r.Read()) {
           if (r.NodeType == XmlNodeType.Element) {
               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);
           }
       }
   }

}

      </source>


XML reader: deal with various NodeType

<source lang="csharp"> // Reading an XML document. using System; using System.Windows.Forms; using System.Xml; public class Test{

   static void Main() {
     XmlDocument document = new XmlDocument();
     document.Load( "books.xml" );
     XmlNodeReader reader = new XmlNodeReader( document );
     
     int depth = -1;
     while ( reader.Read() )
     {
        switch ( reader.NodeType )
        {
           case XmlNodeType.Element:
              depth++;
              TabOutput( depth );
              Console.WriteLine("<" + reader.Name + ">" + "\r\n");
              if ( reader.IsEmptyElement )
                 depth--;
              break;
           case XmlNodeType.rument:
              TabOutput( depth );
              Console.WriteLine("\r\n");
              break;
           case XmlNodeType.Text:
              TabOutput( depth );
              Console.WriteLine("\t" + reader.Value + "\r\n");
              break;
           case XmlNodeType.XmlDeclaration:
              TabOutput( depth );
              Console.WriteLine("<?" + reader.Name + " " + reader.Value + " ?>\r\n");
              break;
           
           case XmlNodeType.EndElement:     
              TabOutput( depth );
              Console.WriteLine("</" + reader.Name + ">\r\n");
              depth--;    
              break;  
        }
     }
  } 
  static void TabOutput( int number )
  {
     for ( int i = 0; i < number; i++ )
        Console.Write("\t");
  }

}

      </source>


XML write: element, attribute, cddata, namespace and entity reference

<source lang="csharp"> using System; using System.IO; using System.Text; using System.Xml; public class WriteXml {

 public static void Main(string [] args) {
   XmlTextWriter writer = new XmlTextWriter(Console.Out);
   writer.Formatting = Formatting.Indented;
   writer.WriteStartDocument(true);
   writer.WriteComment("this is a comment");
   writer.WriteStartElement("root");
   writer.WriteAttributeString("id","1");
   writer.WriteStartAttribute("mynamespace", "name", "foo");
   writer.WriteString("bar");
   writer.WriteEndAttribute();
   // Write another element
   writer.WriteElementString("element1","some characters");
   writer.WriteStartElement("cdataElement");
   writer.WriteAttributeString("date",DateTime.Now.ToString());
   writer.WriteCData("< & would choke on");
   writer.WriteString("< & & & ");
   writer.WriteEndElement();
   // Write an empty element
   writer.WriteStartElement("emptyElement");
   writer.WriteEndElement();
   // Write another empty element
   writer.WriteStartElement("emptyElement","Empty");
   writer.WriteFullEndElement();
   // Write some text
   writer.WriteString("One string ");
   writer.WriteEntityRef("amp");
   writer.WriteString(" another.");
   // Close the root element
   writer.WriteEndElement();
   // End the document
   writer.WriteEndDocument();
   writer.Flush();
   writer.Close();
 }

}

      </source>