XML

XML 指可扩展标记语言

XML 被设计用来传输和存储数据。XML 被设计用来结构化、存储以及传输信息。

xml文档展示

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

xml标签

第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。
下一行描述文档的根元素(像在说:“本文档是一个便签”):<note>
接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
最后一行定义根元素的结尾:
</note>

XML 文档形成一种树结构

XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素均可拥有子元素:

<root>
  <child>
    <subchild>.....</subchild>
  </child>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

XML 元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

<bookstore> 和 <book> 都拥有元素内容,因为它们包含了其他元素。<author> 只有文本内容,因为它仅包含文本。

只有 <book> 元素拥有属性 (category="CHILDREN")。

xml语法规则

所有 XML 元素都须有关闭标签
    <p>This is a paragraph</p>
XML 标签对大小写敏感,标签 <Letter> 与标签 <letter> 
    <Message>这是错误的。</message>
    <message>这是正确的。</message> 
XML 必须正确地嵌套
    <b><i>This text is bold and italic</b></i>    
    <b><i>This text is bold and italic</i></b>
XML 文档必须有根元素
<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>
XML 的属性值须加引号
    <note date=08/08/2008>
    <to>George</to>
    <from>John</from>
    </note> 
    <note date="08/08/2008">
    <to>George</to>
    <from>John</from>
    </note> 
XML 中的注释
    <!-- This is a comment -->

XML命名规则

XML元素必须遵循以下命名规则:

1.名称可以含字母、数字以及其他的字符 2.名称不能以数字或者标点符号开始 3.名称不能以字符“xml”(或者XML、Xml)开始 4.名称不能包含空格

可使用任何名称,没有保留的字词。

XMLDocument解析XML

假如在根目录有个xml文件

<skills>
    <skill>
        <id>2</id>
        <name lang="cn">天下无双</name>
        <damage>123</damage>
    </skill>
    <skill>
        <id>3</id>
        <name lang="cn">永恒零度</name>
        <damage>93</damage>
    </skill>
    <skill>
        <id>4</id>
        <name lang="cn">咫尺天涯</name>
        <damage>400</damage>
    </skill>
</skills>

读取,并取出值


using System;
using System.Xml;
using System.IO;
using System.Collections.Generic;

namespace XMLTest
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            List<Skill> skills = new List<Skill> ();
            XmlDocument xml = new XmlDocument();
            //xml.Load ("/Users/zhangfan/Documents/Developer/untiy/C#/XMLTest/XMLTest/bin/Debug/Data.xml");
            xml.Load("Data.xml");
            XmlNode skillsNode = xml.ChildNodes[0];//获取根节点(第一个节点)
            Console.WriteLine(skillsNode.InnerXml);
            foreach (XmlNode skillNode in skillsNode.ChildNodes) {
                Skill skill = new Skill ();
                XmlNodeList fieldNodeList = skillNode.ChildNodes;
                foreach (XmlNode fieldNode in fieldNodeList) {
                    if (fieldNode.Name == "id") {
                        int id = Int32.Parse (fieldNode.InnerText);
                        skill.Id = id;
                    } else if (fieldNode.Name == "name") {
                        skill.Name = fieldNode.InnerText;
                        skill.Lang = fieldNode.Attributes [0].Value;
                    } else {
                        skill.Damage = Int32.Parse (fieldNode.InnerText);
                    }
                }
                skills.Add (skill);
            }

            foreach (Skill skill in skills) {
                Console.WriteLine (skill.ToString());
            }

            Console.ReadKey ();
        }
    }

    class Skill {
        public int Id{ get; set; }
        public string Name { get; set; }
        public string Lang { get; set; }
        public int Damage { get; set; }

        public override string ToString ()
        {
            return string.Format ("[Skill: Id={0}, Name={1}, Lang={2}, Damage={3}]", Id, Name, Lang, Damage);
        }
    }
}

注意:如果在MonoDevelop编辑器中找不到System.Xml,按照如下步骤解决

results matching ""

    No results matching ""