Csharp/C Sharp/XML/XmlDocument

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

A Simple XML Example

<source lang="csharp"> using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XmlElement xmlBook;
       XmlAttribute xmlParticipantType;
       XmlElement xmlFirstName;
       XmlElement xmlLastName;
       XmlDocument xmlDoc = new XmlDocument();
       XmlElement xmlBooks = xmlDoc.CreateElement("Books");
       xmlDoc.AppendChild(xmlBooks);
       xmlBook = xmlDoc.CreateElement("Book");
       xmlParticipantType = xmlDoc.CreateAttribute("type");
       xmlParticipantType.InnerText = "Author";
       xmlBook.Attributes.Append(xmlParticipantType);
       xmlFirstName = xmlDoc.CreateElement("FirstName");
       xmlFirstName.InnerText = "J";
       xmlBook.AppendChild(xmlFirstName);
       xmlLastName = xmlDoc.CreateElement("LastName");
       xmlLastName.InnerText = "R";
       xmlBook.AppendChild(xmlLastName);
       xmlBooks.AppendChild(xmlBook);
       xmlBook = xmlDoc.CreateElement("Book");
       xmlParticipantType = xmlDoc.CreateAttribute("type");
       xmlParticipantType.InnerText = "Author";
       xmlBook.Attributes.Append(xmlParticipantType);
       xmlFirstName = xmlDoc.CreateElement("FirstName");
       xmlFirstName.InnerText = "E";
       xmlBook.AppendChild(xmlFirstName);
       xmlLastName = xmlDoc.CreateElement("LastName");
       xmlLastName.InnerText = "B";
       xmlBook.AppendChild(xmlLastName);
       xmlBooks.AppendChild(xmlBook);
       XmlNodeList authorsList = xmlDoc.SelectNodes("Books/Book[@type=\"Author\"]");
       foreach (XmlNode node in authorsList) {
           XmlNode firstName = node.SelectSingleNode("FirstName");
           XmlNode lastName = node.SelectSingleNode("LastName");
           Console.WriteLine("{0} {1}", firstName, lastName);
       }
   }

}

</source>


Call GetElementsByTagName to get an element

<source lang="csharp"> using System; using System.Xml; public class MainClass {

   private static void Main() {
       XmlDocument doc = new XmlDocument();
       doc.Load("ProductCatalog.xml");
       XmlNodeList prices = doc.GetElementsByTagName("productPrice");
       decimal totalPrice = 0;
       foreach (XmlNode price in prices) {
           totalPrice += Decimal.Parse(price.ChildNodes[0].Value);
       }
       Console.WriteLine("Total catalog value: " + totalPrice.ToString());
   }

}

</source>


Get XML Nodes in a Specific XML Namespace

<source lang="csharp"> using System; using System.Xml; public class SelectNodesByNamespace {

   private static void Main() {
       XmlDocument doc = new XmlDocument();
       doc.Load("Order.xml");
       XmlNodeList matches = doc.GetElementsByTagName("*","http://mycompany/OrderML");
       foreach (XmlNode node in matches) {
           Console.Write(node.Name + "\t");
           foreach (XmlAttribute attribute in node.Attributes) {
               Console.Write(attribute.Value + "  ");
           }
       }
   }

}

</source>


LoadXml

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

   public static void Main() {
       XmlDocument doc = new XmlDocument();
       String entry = "<book genre="biography"" +
        " ISBN="1111111111"><title>my title</title>" +
        "</book>";
       doc.LoadXml(entry);
       StringWriter writer = new StringWriter();
       doc.Save(writer); // to StringWriter
       String strXML = writer.ToString(); // to String
       Console.WriteLine(strXML);
   }

}

</source>


Save, AppendChild, CreateXmlDeclaration, CreateElement

<source lang="csharp"> using System; using System.Xml; class MainClass {

   public static void Main() {
       XmlDocument doc = new XmlDocument();
       XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
       doc.AppendChild(docNode);
       XmlNode productsNode = doc.CreateElement("products");
       doc.AppendChild(productsNode);
       XmlNode productNode = doc.CreateElement("product");
       XmlAttribute productAttribute = doc.CreateAttribute("id");
       productAttribute.Value = "1";
       productNode.Attributes.Append(productAttribute);
       productsNode.AppendChild(productNode);
       XmlNode nameNode = doc.CreateElement("productName");
       nameNode.AppendChild(doc.CreateTextNode("Coffee"));
       productNode.AppendChild(nameNode);
       XmlNode priceNode = doc.CreateElement("productPrice");
       priceNode.AppendChild(doc.CreateTextNode("0.99"));
       productNode.AppendChild(priceNode);
       productNode = doc.CreateElement("product");
       productAttribute = doc.CreateAttribute("id");
       productAttribute.Value = "2";
       productNode.Attributes.Append(productAttribute);
       productsNode.AppendChild(productNode);
       nameNode = doc.CreateElement("productName");
       nameNode.AppendChild(doc.CreateTextNode("Tea Pot"));
       productNode.AppendChild(nameNode);
       priceNode = doc.CreateElement("productPrice");
       priceNode.AppendChild(doc.CreateTextNode("12.99"));
       productNode.AppendChild(priceNode);
       doc.Save(Console.Out);
   }

}

</source>


Use Load method in XmlDocument to load xml document

<source lang="csharp"> //Order.xml /* <?xml version="1.0" ?> <ord:order xmlns:ord="http://mycompany/OrderML"

 xmlns:cli="http://mycompany/ClientML">
   <cli:client>
       <cli:firstName>Sally</cli:firstName>
       <cli:lastName>Sergeyeva</cli:lastName>
   </cli:client>
   <ord:orderItem itemNumber="3211"/>
   <ord:orderItem itemNumber="1155"/>

</ord:order>

  • /

using System; using System.Xml; class MainClass {

   public static void Main() {
       XmlDocument doc = new XmlDocument();
       doc.Load("Order.xml");
       XmlNodeList matches = doc.GetElementsByTagName("*", "http://mycompany/OrderML");
       foreach (XmlNode node in matches) {
           Console.Write(node.Name + "\t");
           foreach (XmlAttribute attribute in node.Attributes) {
               Console.Write(attribute.Value + "  ");
           }
       }
   }

}

</source>


Use SelectNodes to query nodes by XPath

<source lang="csharp"> using System; using System.Xml; class MainClass {

   private static void Main() {
       XmlDocument doc = new XmlDocument();
       doc.Load("orders.xml");
       XmlNodeList nodes = doc.SelectNodes("/Order/Items/Item/Name");
       foreach (XmlNode node in nodes) {
           Console.WriteLine(node.InnerText);
       }
       Console.ReadLine();
   }

}

</source>