Csharp/CSharp Tutorial/XML/Xml Atrributes
Содержание
If it is an Attribute
<source lang="csharp">using System; using System.Xml; using System.Collections.Generic; using System.Text;
class Program{ static void Main(string[] args) { XmlDocument itemDoc = new XmlDocument(); itemDoc.Load("items.xml"); Console.WriteLine("DocumentElement has {0} children.",itemDoc.DocumentElement.ChildNodes.Count); foreach (XmlNode itemNode in itemDoc.DocumentElement.ChildNodes) { XmlElement itemElement = (XmlElement)itemNode; Console.WriteLine("\n[Item]: {0}\n{1}", itemElement.Attributes["name"].Value,itemElement.Attributes["description"].Value); if (itemNode.ChildNodes.Count == 0) Console.WriteLine("(No additional Information)\n"); else { foreach (XmlNode childNode in itemNode.ChildNodes) { if (childNode.Name.ToUpper() == "ATTRIBUTE") { Console.WriteLine("{0} : {1}", childNode.Attributes["name"].Value, childNode.Attributes["value"].Value); } else if (childNode.Name.ToUpper() == "SPECIALS") { foreach (XmlNode specialNode in childNode.ChildNodes) { Console.WriteLine("*{0}:{1}", specialNode.Attributes["name"].Value, specialNode.Attributes["description"].Value); } } } } } } }</source>
Using XmlAttributeOverrides with XmlSerializer
<source lang="csharp">using System; using System.IO; using System.Reflection; using System.Xml.Serialization;
public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string EmailAddress { get; set; } public override string ToString() { return string.Format("{0} {1}\nEmail: {2}",FirstName, LastName, EmailAddress); } } public class Tester { static void Main() { Customer c1 = new Customer{ FirstName = "A", LastName = "G", EmailAddress = "o@a.ru" }; XmlAttributeOverrides overrides = new XmlAttributeOverrides(); Type customerType = typeof(Customer); foreach (PropertyInfo prop in customerType.GetProperties()) { XmlAttributes attrs = new XmlAttributes(); attrs.XmlAttribute = new XmlAttributeAttribute(); overrides.Add(customerType, prop.Name, attrs); } XmlSerializer serializer = new XmlSerializer(customerType, overrides); StringWriter writer = new StringWriter(); serializer.Serialize(writer, c1); string xml = writer.ToString(); Console.WriteLine("Customer in XML:\n{0}\n", xml); Customer c2 = serializer.Deserialize(new StringReader(xml)) as Customer; Console.WriteLine("Customer in Object:\n{0}", c2.ToString()); } }</source>
Write attribute value
<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath;
public class MainClass { public static void Main() { XmlDocument doc; XPathNavigator editor; XmlWriter writer; doc = new System.Xml.XmlDocument(); doc.Load("pubs.xml"); editor = doc.CreateNavigator().SelectSingleNode("/pubs"); writer = editor.AppendChild(); writer.WriteStartElement("publishers"); writer.WriteAttributeString("pub_id", "1234"); writer.WriteAttributeString("pub_name", "A"); writer.WriteEndElement(); writer.Close(); doc.Save("output.xml"); } }</source>
XmlTextReader: move to content and move to first attribute
<source lang="csharp">using System; using System.Xml; class MainClass {
static void Main(string[] args) { XmlTextReader reader = new XmlTextReader(@"C:\books.xml"); reader.MoveToContent(); reader.MoveToFirstAttribute(); Console.WriteLine("First Attribute Value" +reader.Value); Console.WriteLine("First Attribute Name" +reader.Name); }
}</source>
XmlTextReader: read all attributes
<source lang="csharp">using System; using System.Xml; class MainClass {
static void Main(string[] args) { XmlTextReader reader = new XmlTextReader(@"C:\books.xml"); while (reader.Read()) { if (reader.HasAttributes) { Console.WriteLine(reader.Name + " Attribute"); for (int i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); Console.WriteLine("Nam: "+reader.Name +", Value: "+ reader.Value); } reader.MoveToElement(); } } }
}</source>