当前位置:文档之家› xml文档

xml文档

xml文档
xml文档

XmlDocument xDoc = new XmlDocument();

xDoc.Load("X.xml");

foreach (XmlElement elem in xDoc.SelectNodes("/data/a/item"))

Console.WriteLine(lst.InnerText);

Console.ReadKey();

static void Main(string[] args)

{

XmlDocument xDoc = new XmlDocument();

xDoc.Load("X.xml");

XmlNodeList lst = xDoc.ChildNodes[1].ChildNodes[1].ChildNodes ;

for (int i=0;i< lst.Count ;i++)

Console.WriteLine(i.ToString()+lst.Item(i).Name );

foreach (XmlNode n in lst)

Console.WriteLine(https://www.doczj.com/doc/789482380.html, );

Console.ReadKey();

}

读取有namespace的Xml

1001

2001

10055

120011

2000

static void Main(string[] args)

{

XmlDocument xDoc = new XmlDocument();

xDoc.Load("X.xml");

XmlNamespaceManager ns = new XmlNamespaceManager(https://www.doczj.com/doc/789482380.html,Table );

ns.AddNamespace("smmd", "nxchj");

foreach (XmlElement elem in xDoc.SelectNodes("/smmd:name/smmd:a",ns)) Console.WriteLine(elem.InnerText );

Console.ReadKey();

}

C#操作xml

引用命名空间:using System.Xml

1.检查所要操作的xml文件是否存在:

System.IO.File.Exists(文件路径及名称);

2.得到xml文件:

(1)在https://www.doczj.com/doc/789482380.html,中可以这样得到:

XmlDocument xmlDoc = new XmlDocument();

//导入xml文档

xmlDoc.Load( Server.MapPath("xmlTesting.xml"));

//导入字符串

//xmlDoc.LoadXml("<bookStore> <book id="01" price="3.5元"> 读者");

注:Server.MapPath("xmlTesting.xml")此时的xmlTesting.xml文件必须是在当前的解决方案里;同样可以写成完整的物理路径xmlDoc.Load (@"E:"软件学习"测试"myNoteWeb"xmlTesting.xml")

(2)在windForm中直接用物理路径得到所要操作的xml文件具体实现方法同上

3.创建xml文件:

XmlDocument xmlDoc = new XmlDocument(); //创建xml文档(实例化一个xml)

XmlNode root = xmlDoc.CreateElement("bookStore");//创建根节点

//创建第1个子结点:

XmlNode bookNode = xmlDoc.CreateElement("book");

bookNode.InnerText = "读者";

//为此节点添加属性

法1:

bookPublishNode.SetAttribute("id", "01")

root.AppendChild(bookNode);

法2:

XmlAttribute xmlattribute = tempXmlDoc.CreateAttribute("price");

xmlattribute.Value = "3.5元";

tempRoot .Attributes .Append (xmlattribute )

//创建第2个根节点的子结点:

XmlNode tempBookNode = xmlDoc.CreateElement("tempbook ");

tempBookNode.InnerText ="文摘";

root.AppendChild(tempBookNode);

c#操作Xml(一)

Xml作为一个非常重要的纯文本格式已经进入了编程的很多领域,作为一个面向应用层面的c#也一样在很多领域离不开Xml。

但是,c#在很多方面对Xml做了写封装,以至于很多操作Xml的代码,都不需要手动去写。例如,c#写WebService这种需要大量操作Xml的服务,除了极其个别的情况下,基本看不到任何操作Xml的代码。这是c#的一个优势,但是,最近发现正是这样一些c#的优势,导致了新一代c#程序员的能力退化。因为90%的情况下,不需要手动操作Xml,所以,年轻的c#程序员也觉得没必要为了这10%的情况,而去学如何手工读写Xml。真不知道,ms 提供了这么简便的工具,是ms做的善事还是作的孽。。。

好吧,废话就不说了,转入主题。

1.如何用Xml Dom的方式读取Xml

Xml Dom方式是最原始的一种操作Xml的途径,从.net Framework 1.0开始就开始支持Dom方式。

1.1如何以Dom方式加载Xml

要读取Xml首先要加载Xml,加载的方式有两种,一种是从流或类似的Reader加载,例如:

当然还可以从字符串加载:

1.1读取无namespace的Xml

Xml已经准备好了,下面就开始读取这个Xml。现在希望读取data节下面的所有item中的text,那么就可以:

看看运行结果:

但是,这样写的问题有很多,例如在data节点中有非item的节点,这样访问,也就被无差别的把非item项也写出来了。例如把如果数据改成这样:

这样,在data节里面,除了4个item,还有一个other,这个other是不需要的,必须被排除掉,如果直接用第一中ChildNodes去访问的话,会得到这样的结果:

显然“!@#”也被选择出来了,这可不是我们所期望的,

所以,改用XPath的方式访问:

其运行结果为:

很好的other项排除在需要的节点外,这才是我们真正想要的结果:)

1.2读取有namespace的Xml

和c#一样Xml也有namespace,并且namespace在Xml中的作用巨大,也许你并未感受到namespace的作用,但是,你可能已经不得不面对那些有namespace的Xml了。

好吧,我们先加载一个有namespace的xml:

这里,我们准备了一个namespace——urn:vwxyzh,并且把这个namespace缩写成v。举个例子来说,v:data就是urn:vwxyzh这个namespace下面的data。

现在再用原来的XPath去跑一下:

Oh, no!一个也没有选择出来,为什么会这样哪?

因为原来的/data/item中的data节是没有namespace的data,和urn:vwxyzh的data不是一回事,所以,这个XPath根本定为不到任何节点。

必须要修改部分代码才能达到我们的目的,先来看看Select方法有哪些重载吧:

第一个重载,就是之前使用的那个,第二个重载,需要额外提供一个XmlNamespaceManager实例,一看名字就知道,这个实例是用于管理Xml的Namespace的。再查看一下这个类的成员:

可以发现,创建这个实例需要一个XmlNameTable,谁能提供这个XmlNameTable的实例哪?XmlDocument本身就提供了这个XmlNameTable:

c#操作Xml(二)

2 用Dom的方式创建/修改xml

上一篇讲了如何用dom的方式读一个xml,这一篇就讲一下如何用dom的方式去写一个xml。不过,用dom的写Xml本身并不是一个好主意,因为Dom方式本身的废话超多,做一个简单的事情就需要好几句语句,但是作为一个基本的方式还是有必要了解一下的。2.1 用Dom的方式去创建xml

如果想写出这样一个xml:

那么你可能需要这样一大段代码:

分析一下,在dom方式下要创建任何一个xml的节点都必须要使用XmlDocument的对应的Create方法创建,然后再添加到对应的位置,这也就是Dom方式最麻烦的地方。

看看运行结果:

这个xml和我们期望的xml是等价的,只是没有被格式好,好吧,想要一个格式化好的文档,那么就修改一下写xml的部分(在讲xmlwriter的时候还会讲到这个setting类):

再看看运行结果:

这样就和期望的xml一致了。

2.2 用Dom的方式去创建有namespace的xml

如果有namespace的xml怎么创建哪?

其实也很简单,换一个重载就可以了,在创建节点的时候用带有namespace的重载就可以了:

再看一下结果:

2.3 用Dom的方式去修改xml

修改xml其实也无非就是读取xml然后再做必要的增删改。

在修改之前,首先当然就是要定为到xml的节点,这个在第一篇里面已经讲过。

如果所做的修改是添加节点那么基本上就和上一节的内容相似:

在原来这个xml的基础上添加一个person——Allen Lee,可以看到几乎就是把第一篇的读xml和前一节的创建xml结合起来,开看看运行结果吧:

那么删除节点怎么办哪?

例如,要从已经有多个Person的xml中,删除凡是FirstName叫Allen的Person,就可以这样写:

注意,这里用了个XPath去查询所有的FirstName叫Allen的Person,也就是:

/v:persons/v:person[v:firstName='Allen']

v是namespace,之前用已经解释过了,这个XPath要找的是根节点里面的(/)persons 节点(v:persons)里面的(/)person节点(v:person),那么[]在这里是什么意思哪?[]中间的部分代表条件约束,或者说是where,前面的XPath部分已经选择person节点,现在对找到的Person做个条件约束,条件的内容是firstname的值需要是Allen(v:firstName=’Allen’)。

通过上面的这个XPath就可以定位到一个节点集,c#中为XmlNodeList类型,里面有一系列的节点(例子中为1个),然后将他移除即可,不过该死的Dom Api需要在父节点中删除这个节点,也就是不得不用这种很恶心的写法:

node.ParentNode.RemoveChild(node);

修改就暂时讲到这里,其他类型的修改由于比较简单,就展开再说了。

看到这里,想必读者也知道如何操作xml了,但是,Dom Api的繁琐写法确实非常影响工作效率,下一篇,将进入Linq to Xml时代,来看看新的Api带来的巨大的工作效率的提升。

这样,我们就可以修改为:

先创建一个Manager的实例,然后使用AddNamespace方法,把“v”设置为“urn:vwxyzh”的缩写。然后修改XPath,把data修改成v:data,item修改成v:item,就可以了,现在来看一下运行结果:

Yeah!这就是我们所需要的。

c#操作Xml(三)

c#进入了3.0时代,引入了强大的Linq,同时提供了Linq to Xml,这个全新的Xml Api。与Linq to Xml相比,传统的DOM Api就显得笨重而繁杂了。

Linq to Xml的本质

首先,linq to xml是一种in-memory的技术(官方说法是:LINQ to XML provides an in-memory XML programming interface that leverages the .NET Language-Integrated Query (LINQ) Framework. LINQ to XML uses the latest .NET Framework language capabilities and is comparable to an updated, redesigned Document Object Model (DOM) XML programming interface.),也就是说,如果用Linq to Xml去打开一个Xml,也就会占用相应的内存。所以和DOM一样,在极端情况下,会出现内存不足。

其次,linq to xml从本质上来说,就是linq to object+一套Xml Api,与linq to sql和linq to entity framework不同,后两者是使用特定的Linq Provider去翻译成对应系统的语言。

Linq to Xml的表现

撇开理论的东西,还是来看看最简单的表现吧。如果要创建这样一个Xml:

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

Allen

Lee

https://www.doczj.com/doc/789482380.html,/allenlooplee/

我们只需要这样一句语句(https://www.doczj.com/doc/789482380.html,可以更简单,当然这个超出了本文的范围):XDocument doc = new XDocument(

new XDeclaration("1.0", "utf-8", null),

new XElement("persons",

new XElement("person",

new XElement("firstName", "Zhenway"),

new XElement("lastName", "Yan"),

new XElement("address", "https://www.doczj.com/doc/789482380.html,/vwxyzh/")

),

new XElement("person",

new XElement("firstName", "Allen"),

new XElement("lastName", "Lee"),

new XElement("address", "https://www.doczj.com/doc/789482380.html,/allenlooplee/")

)

)

);

看起来还行,构造一个Xml要比DOM方式简单的多,不过比起直接写Xml还是复杂了点,不过这个方式也可以这么用:

var persons = new[]

{

new

{

FirstName = "Zhenway",

LastName = "Yan",

Address = "https://www.doczj.com/doc/789482380.html,/vwxyzh/"

},

new

FirstName = "Allen",

LastName = "Lee",

Address = "https://www.doczj.com/doc/789482380.html,/allenlooplee/"

}

};

XDocument doc = new XDocument(

new XDeclaration("1.0", "utf-8", null),

new XElement("persons",

from person in persons

select new XElement("person",

new XElement("firstName", person.FirstName),

new XElement("lastName", https://www.doczj.com/doc/789482380.html,stName),

new XElement("address", person.Address)

)

)

);

这样,就可以看出Linq to Xml在通过外部数据构造Xml的便捷性(https://www.doczj.com/doc/789482380.html,的方式更加简洁)。

在来看看Linq to Xml的查询:

XDocument doc = XDocument.Parse(@"

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

Allen

Lee

https://www.doczj.com/doc/789482380.html,/allenlooplee/

");

foreach (var item in doc.Root.Descendants("address"))

{

Console.WriteLine((string)item);

}

这里,要注意Descendants方法的签名:

public IEnumerable Descendants(XName name);

参数类型是XName,而传的是一个string,这个为什么是合法的哪?来看看XName中的

public static implicit operator XName(string expandedName);

原来有个隐式转换,这样就好理解了,编译器自动调用了隐式转换。

再来看一个更加复杂的查询:

XDocument doc = XDocument.Parse(@"

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

Allen

Lee

https://www.doczj.com/doc/789482380.html,/allenlooplee/

");

foreach (var item in from person in doc.Root.Descendants("person")

where (string)person.Element("firstName") == "Zhenway"

select (string)person.Element("address"))

{

Console.WriteLine(item);

}

那么有namespace的Xml如何用Linq to Xml来处理哪?

c#操作Xml(四)

上集初步介绍了Linq to Xml的基本操作,简单的新建xml操作和简单的查询xml操作。不过,可以注意到的是上集里面的xml都是没有Namespace的xml,那么有Namespace的xml如何操作哪?

设置目标

先看看我们目标,完整这样一个xml:

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

注意,这个xml的每一个节点都是https://www.doczj.com/doc/789482380.html,/vwxyzh/这个命名空间下的。

当然,这样的xml也有很多种等效写法,具体请参考w3shools。

分析实现手段

与之前一集相比,这里的”persons”,不再是一个纯粹的”persons”,而是一个带有Namespace 的persons,所以在创建这样一个节点时不再是之前的:

var persons = new XElement("persons");

而是需要修改成带有Namespace的节点名。

那么如何获得这个带有Namespace的节点名哪?

好吧,让我们回过头来看看XElement的构造函数:

public XElement(XName name);

注意哦,参数的类型是XName,而不是string,那么平时为什么能用string哪?因为上一集里面提到过,XName定义了一个隐式的转换,可以把string隐式的转换成XName。

所以,关于Namespace自然也要从XNamespace入手,然后找一个能够变成XName的方法,察看XNamespace的定义,就可以看到:

public static XName operator +(XNamespace ns, string localName);

只要把XNamespace加上本地名称(string),就是一个XName了,非常简单。

再看看如何创建一个XNamespace:

public static implicit operator XNamespace(string namespaceName);

又是隐式转换。。。来看看具体如何创建一个带namespace的persons吧:XNamespace v = "https://www.doczj.com/doc/789482380.html,/vwxyzh/";

var persons = new XElement(v + "persons");

定义一个namespace,在使用时直接+string即可。在c#里面这已经是最简单的方式了。实现

到这里,已经可以完成上面的那个目标xml了:

XNamespace v = "https://www.doczj.com/doc/789482380.html,/vwxyzh/";

XDocument doc = new XDocument(

new XDeclaration("1.0", "utf-8", null),

new XElement(v + "persons",

new XElement(v + "person",

new XElement(v + "firstName", "Zhenway"),

new XElement(v + "lastName", "Yan"),

new XElement(v + "address", "https://www.doczj.com/doc/789482380.html,/vwxyzh/")

)

)

);

doc.Save(Console.Out);

来看看执行结果:

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

和预期的略有不同,首先encoding被修改成gb2312,这是因为中文操作系统的Console 的编码是gb2312,所以Xml的encoding被自动修改了,其次,原来的Namespace用v来缩写,但是输出的xml缺是改用了默认Namespace,不过如果看过前面提到的w3schools的话,就知道这两者是等价xml。

扩展

在查找一个xml时,同样也是需要一个XName,因此当遇到有Namespace的xml,也可以用同样的手法:

XDocument doc = XDocument.Parse(@"

Zhenway

Yan

https://www.doczj.com/doc/789482380.html,/vwxyzh/

Allen

Lee

https://www.doczj.com/doc/789482380.html,/allenlooplee/

");

XNamespace v = "https://www.doczj.com/doc/789482380.html,/vwxyzh/";

foreach (var item in from person in doc.Root.Descendants(v + "person")

where (string)person.Element(v + "firstName") == "Zhenway"

select (string)person.Element(v + "address"))

{

Console.WriteLine(item);

}

XML DOM 遍历节点树

如需读取、更新、创建或者操作某个XML文档,则需要XML解析器。

实例

遍历节点树

本例展示如何循环遍历< note>的所有子节点,并输出节点名和节点值。

您常常会需要循环遍历XML文档中的元素。

下面的例子可循环遍历< note>的所有子元素,并输出每个节点的节点名以及节点值:

< html>

< body>

< script type="text/javascript">

var text="< note>";

text=text+"< to>Tove< /to>";

text=text+"< from>Jani< /from>";

text=text+"< heading>Reminder< /heading>";

text=text+"< body>Don't forget me this weekend!< /body>"; text=text+"< /note>";

// code for IE

if (window.ActiveXObject)

{

var doc=new ActiveXObject("Microsoft.XMLDOM"); doc.async="false";

doc.loadXML(text);

}

// code for Mozilla, Firefox, Opera, etc.

else

{

var parser=new DOMParser();

var doc=parser.parseFromString(text,"text/xml");

}

// documentElement always represents the root node

var x=doc.documentElement;

for (i=0;i< x.childNodes.length;i++)

{

document.write(x.childNodes[i].nodeName); document.write("=");

document.write(x.childNodes[i].childNodes[0].nodeValue); document.write("< br />");

}

< /script>

< /body>

< /html>

输出:

to=Tove

from=Jani

heading=Reminder

body=Don't forget me this weekend!

XML DOM 创建节点

实例

在下面的例子中,我们将使用XML文件books.xml,以及JavaScript函数loadXMLDoc()。创建一个元素节点

本例使用createElement()来创建一个新的元素节点,并使用appendChild()将此节点添加到一个节点列表中。

创建一个属性节点

本例使用createAttribute()来创建一个新的属性节点,并使用setAttributeNode()将此节点插入一个元素中。

创建一个文本节点

本例使用createTextNode()来创建一个文本节点,并使用appendChild()将此节点添加到一个节点列表中。

创建一个CDATA section节点

本例使用createCDATAsection()来创建一个CDA TA section节点,并使用appendChild()将此节点添加到一个节点列表中。

创建一个注释节点

本例使用createComment()来创建一个注释节点,并使用appendChild()将此节点添加到一个节点列表中。

创建一个元素

createElement()方法可创建一个新的元素节点。

下面的代码片段可创建一个元素(< edition>),并可把它添加到每个< book>元素的最后一个子元素之后:

xmlDoc=loadXMLDoc("books.xml");

var x=xmlDoc.getElementsByTagName('book');

var newel

for (i=0;i< x.length;i++)

{

newel=xmlDoc.createElement('edition');

x[i].appendChild(newel);

}

创建一个属性

createAttribute()可创建一个新的属性节点。

下面的代码片段可创建一个"edition"属性,并可把它添加到所有的< book>元素中:xmlDoc=loadXMLDoc("books.xml");

var x=xmlDoc.getElementsByTagName('book');

var newatt;

for (i=0;i< x.length;i++)

{

newatt=xmlDoc.createAttribute("edition");

newatt.value="first";

x[i].setAttributeNode(newatt);

}

创建一个文本节点

createTextNode()方法可创建一个新的文本节点。

下面的代码片段可创建一个元素(< edition>),其中带有一个文本节点('First'),并可把此元素添加到每一个< book>元素的最后一个子元素之后:

xmlDoc=loadXMLDoc("books.xml");

var x=xmlDoc.getElementsByTagName('book');

var newel,newtext

for (i=0;i< x.length;i++)

{

newel=xmlDoc.createElement('edition');

newtext=xmlDoc.createTextNode('First');

newel.appendChild(newtext);

x[i].appendChild(newel);

创建一个CDATA Section节点

createCDATASection()方法可创建一个新的CDATA Section节点。

下面的代码片段可创建一个CDATA section,并可把它添加到每一个< book>元素的最后一个子元素之后:

xmlDoc=loadXMLDoc("books.xml");

var x=xmlDoc.getElementsByTagName('book');

var newCDATA,newtext;

newtext="Special Offer & Book Sale";

for (i=0;i< x.length;i++)

{

newCDATA=xmlDoc.createCDATASection(newtext);

x[i].appendChild(newCDATA);

}

创建一个注释节点

createComment()方法可创建一个新的注释节点。

下面的代码片段可创建一个注释节点,并可把它添加到每一个< book>元素的最后一个子元素之后:

xmlDoc=loadXMLDoc("books.xml");

var x=xmlDoc.getElementsByTagName('book');

var newComment,newtext;

newtext="Revised September 2006";

for (i=0;i< x.length;i++)

{

newComment=xmlDoc.createComment(newtext);

x[i].appendChild(newComment);

}

XML DOM 访问节点

通过DOM,您可以访问XML文档中的每个节点。

查找并访问节点

你可通过若干种方法来查找您希望操作的元素:

o 通过使用getElementsByTagName()方法

o 通过使用一个元素节点的parentNode、firstChild以及lastChild属性getElementsByTagName()

getElementsByTagName()方法可在整个文档中查找任何XML元素。

此方法会忽略文档的结构。假如你文档中所有< book>元素,getElementsByTagName()方法会全部找出它们,不管这些< book>元素位于哪个级别。

就是说,这个方法会给您任何您所需要的XML元素,不论它们所处的位置!getElementsByTagName()方法会使用指定的标签名返回所有的元素(作为一个节点列表),这些元素是您在使用此方法时所处的元素的后代。

getElementsByTagName()可用于任何XML元素:

getElementsByTagName() 语法

getElementsByTagName("tagname");

例子

下面这个例子会返回文档中所有< book>元素的一个节点列表:

xmlDoc.getElementsByTagName("book");

节点列表

当使用某个节点列表时,我们通常会把此列表存储在一个变量中,就像这样:

var x=xmlDoc.getElementsByTagName("book");

现在,变量x包含着页面中所有< book>元素的一个列表,并且我们可通过它们的索引号莱访问这些< book>元素。

注释:索引起始于0。

您可以通过使用length属性来循环遍历节点列表:

var x=xmlDoc.getElementsByTagName("book");

for (var i=0;i< x.length;i++)

{

// do something with each < book> element

}

您也可以通过使用索引号莱访问某个具体的元素。

要访问第三个< book>元素,您可以这样写:

var y=x[2];

parentNode、firstChild以及lastChild

属性parentNode、firstChild以及lastChild会遵循文档的结构,可在文档中继续进行短距离的旅行。

请看下面的XML片段:

< bookstore>

< book category="COOKING">

< title lang="en">Everyday Italian< /title>

< author>Giada De Laurentiis< /author>

< year>2005< /year>

< price>30.00< /price>

< /book>

< /bookstore>

在上面的XML代码中,< title>元素是< book>元素的首个子元素(firstChild),< price>元素是< book>元素的最后一个子元素(lastChild)。

同时,< book>元素是< title>、< author>、< year>以及< price>元素的父节点(parentNode)根节点

有一个特殊的文档属性可用来访问这些标签:

o document.documentElement

此属性可返回存在于XML和HTML文档中的根节点。

XML DOM 节点导航

我们可以通过使用节点彼此间的关系在节点间进行导航:

parentNode

childNodes

firstChild

lastChild

nextSibling

previousSibling

请看下面的XML文件:books.xml

下面这幅图展示了节点树的一个部分,以及上面这个XML文件中节点间的关系:

XML文件格式及特点

XML文件格式的特点 1. 具有良好的格式 XML 文档格式属于良好格式的文件。HTML 文件中的标记,有些是不需要结尾标记的,如
,有些网页缺少若干结尾标记,照样能正确显示。而XML 的标记一定要拥有结尾标记,例如: 张三 即,XML 标记一定是成双成对的。如果没有结尾标记,那么在结束的“>”前,需要有“/”,表示开头和结尾是在同一标记内,例如: 2. 具有验证机制 XML 的标记是程序员自己定义的,标记的定义和使用是否符合语法,需要验证。XML有两种验证方法。一种是DTD,它是一个专门的文件,用来定义和检验XML 文档中的标记。另一种是XML Schema,用XML 语法描述。它比DTD 更优越,多个Schema 可以复合使用XML 名称空间,可以详细定义元素的内容及属性值的数据类型。 3. 灵活的Web 应用 在 XML 中数据和显示格式是分开设计的,XML 元数据文件就是纯数据的文件,可以作为数据源,向HTML 提供显示的内容,显示样式可以随HTML 的变化而丰富多彩。也就是说,HTML 描述数据的外观,而XML 描述数据本身,是文本化的小型数据库表达语言。HTML 数据和显示格式混在一起,显示出一种样式。XML 采用的标记是自己定义的,这样数据文件的可读性就能大大提高,也不再局限于HTML 文件中的那些标准标记了。由于XML 是一个开放的基于文本的格式,它可以和HTML 一样使用HTTP 进行传送,不需要对现存的网络进行改变。数据一旦建立,XML 就能被发送到其他应用软件、对象或者中间层服务器中做进一步的处理,或者可以被发送到桌面用浏览器浏览。XML 和HTML、脚本、公共对象模式一起为灵活的3 层Web 应用软件的开发提供了所需的技术。 4. 丰富的显示样式 XML 数据定义打印、显示排版信息主要有3 种方法:用CSS(Cascading Style Sheet)定义打印和显示排版信息,用XSLT 转换到HTML 进行显示和打印,用XSLT 转换成XSL(eXtensible Stylesheet Language)的FO(Formatter Object) 进行显示和打印。这些方法可以显示出丰富的样式,呈现漂亮的网页。 5. XML 是电子数据交换(EDI)的格式 XML 是为互联网的数据交换而设计的,它不仅仅是SGML 定义的用于描述的文档,而且在电子商务等各个领域使数据交换成为可能,如图1.2 所示。XML 能够应用于各种领域的原因,就是它具有到目前为止其他方法所不具备的数据描述特点,控制信息不是采用应用软件的独有形式,而是采用谁都可以看得懂的标记形式来表现,所以XML 最适合作为数据交换的标准,这也是XML 受人关注的原

xml文件格式

XML文件结构 一个XML文件通常包含文件头和文件体两大部分 1. 文件头 XML文件头由XML声明与DTD文件类型声明组成。其中DTD文件类型声明是可以缺少的,关于DTD声明将在后续的内容中介绍,而XML声明是必须要有的,以使文件符合XML的标准规格。 在前面的Flowers.xml文件中的第一行代码即为XML声明: 其中: “”代表一条指令的结束; “xml”代表此文件是XML文件; “ version="1.0" ”代表此文件用的是XML1.0标准; “ encoding="gb2312" ”代表此文件所用的字符集,默认值为Unicode,如果该文件中要用到中文,就必须将此值设定为gb2312。 注意:XML声明必须出现在文档的第一行。 2. 文件体 文件体中包含的是XML文件的内容,XML元素是XML文件内容的基本单元。从语法讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。

XML元素与HTML元素的格式基本相同,其格式如下: <标记名称属性名1="属性值1"属性名1="属性值1"……>内容 所有的数据内容都必须在某个标记的开始和结束标记内,而每个标记又必须包含在另一个标记的开始与结束标记内,形成嵌套式的分布,只有最外层的标记不必被其他的标记所包含。最外层的是根元素(Root),又称文件(Document)元素,所有的元素都包含在根元素内。 在前面的Flowers.xml文件中,根元素就是,根元素必须而且只能有一个,在该文件有三个子元素,这样的元素可以有多个。 4.1.2 XML的基本语法 1. 注释 XML的注释与HTML的注释相同,以“”结束。 2. 区分大小写 在HTML中是不区分大小写的,而XML区分大小写,包括标记,属性,指令等。 3. 标记 XML标记与HTML标记相同,“<”表示一个标记的开始,“>”表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。 在XML中不含任何内容的标记叫做空标记,格式为:<标记名称/>

XML结构设计文档

辩论赛多功能系统 XML结构设计文档 设计说明 在本系统的三个分系统中储存的所有数据将通过XML的形式进行保存本设计文档详细的说明三个系统中需要的数据以及数据的呈现方式。 XML的解释 XMl是一种常见的文件数据储存结构。在文件中以树形结构体现数据的储存方式。树中包含所个节点,节点中有属性和值。属性和值都可以储存关于节点的信息。在本系统中由于要使用中文所有的编码都将使用utf-8储存。 数据类型说明 在下面体现的节点的属性和值中,说明编号的采用int型说明分数的采用float 其他没有相关说明的都是采用QString类型(QT中的字符串类型)。 数据体现方式 赛程编制系统的 辩论赛队伍信息 根节点队伍信息 子节点队伍属性:队伍编号队伍名所属学院或单位 子节点辩手属性:辩手编号辩手姓名辩手相关图片路径 … … … …

辩题库 根节点辩题库 子节点辩题属性:辩题号正方辩题反方辩题 … 辩论赛小组赛赛程分布信息 根节点小组赛赛程 子节点队伍属性:队伍编号 子节点对阵队伍属性:队伍编号胜负情况 … … … … 小组赛得分总结 根据上赛程最后的胜负情况进行得分的合计 根节点小组赛得分 子节点队伍属性:比赛积分 … 辩论赛系列赛对阵信息 胜者组 根节点胜者组比赛 子节点系列赛属性:次序比赛队伍个数比赛总场次子节点比赛属性:场次比赛辩题编号 子节点正方属性:比赛队伍编号 子节点反方属性:比赛队伍编号 … … … … 败者组 比赛数据形式与胜者组相同

比赛控制系统数据信息 比赛时间控制方案信息 根节点时间控制 子节点阶段属性:阶段名阶段计时阶段计时方式 或音乐路径视频路径图片路径 … … 比赛打分系统数据信息 打分表格数据 根节点表格属性打分人姓名打分日期比赛编号正方(反方)子节点打分项分数(可能略) 子节点打分项分数 … … 算分方法 根节点算分 子节点打分项算分方法 … …

基于XML制作的新闻添加系统

基于XML制作的新闻添加系统 摘要:可延伸标记语言XML(eXtensible Markup Language)是SGML (Standard Generalized Markup Language)的一个子集...... 其目标是让一般的SGML能够在网站上被服务、接收与处理。如同 HTML一样,XML被设计成容易使用,并且能够与SGML及HTML共 同合作。XML的特点是电子数据交换(EDI)和灵活的开发。因为 XML是数据和格式分离设计的,所以XML元数据文件就是纯数据 的文件,这样就可以使用同一个数据源,显示多种样式了。当你 建立XML 文件时,你可以建立自己的元素并因需要为它们命名, 而不是只能使用那些受限制的预先定义好的元素群组,因而达成 了可延伸卷标语言中的“可延伸(extensible)”的特性。 关键词:XML(eXtended Markup Language)、数据链路、数据岛(data island) “可延伸标记语言XML(eXtensible Markup Language)是SGML (Standard Generalized Markup Language)的一个子集......其目标是让一般的SGML能够在网站上被服务、接收与处理。如同HTML一样,XML被设计成容易使用,并且能够与SGML及HTML共同合作。”①XML是从SGML进化来的。最初的SGML是为了解决文档及其格式问题的一种标记语言,所以非常的复杂和难以使用,那时计算机的应用水平还处在很低的阶段,并且那时人们只需要传递和显示一些简单的数据。因此,89年Tim Berners-lee依据SGML开发出一种非常简单的超文本格式,就叫HTML(HyperText Markup Language)。当计算机的应用水平也大幅度的提高的时候,人们已经开始对太简单的HTML感到不满意,因此又开始对其进行修改、升级,就这样HTML从1.0一直升到4.0的版本,扩展了许多的命令,可以让HTML解决更多的问题。但是,由于HTML本身的缺陷,为了解决更多的问题,而把简单的HTML变成一个非常复杂的,难以理解的语言,再加上HTML是把数据和显示格式一起存放的,如果我们只想使用数据而不需要格式,可以想象,分离这些数据和格式是多么的困难。而随着Internet的发展, 98年1月W3C公布了XML1.0版本,立即成为计算机史上一个重要的里程碑。

实验五 XML文档设计

实验五XML文档设计 一、实验目的 1.掌握在XML SPY中创建XML文档的方法 2.掌握在XML Spy中验证XML文件格式的正确性、有效性的方法 3.了解并掌握XML DTD的定义方法及其用途 4.了解并掌握DTD元素、属性、实体声明的基本语法 5.了解并掌握XMLSpy中基于DTD的XML文件输入 6.了解并掌握XML Schema的定义方法及其用途 7.了解并掌握Schema的基本结构、数据类型、元素、属性的声明 8.了解并掌握XMLSpy中基于Schema的XML文件输入 9.掌握使用XSL显示XML文件的基本方法 10.了解并掌握XML文档中使用CSS的引入式方法 11.了解并掌握使用XSL显示XML文件的基本方法 二、实验环境 Windows操作系统,XML SPY,IE。 三、实验内容 1. 在XMLSpy中输入如下XML文件,用IE打开观察一下效果。 2.创 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 2.建一个格式良好的xml文档,存储学生成绩的信息,包括:学号number、姓名name、成绩score。 上机实现并在浏览器中进行查看。 3.分析下列XML实例,编写外部DTD文档,并进行验证。 <学生名册> <学生学号=”A1”>

<姓名>张三 <性别>男 <年龄>20 <学生学号=”A2”> <姓名>李四 <性别>女 <年龄>19 <学生学号=”A3”> <姓名>王二 <性别>男 <年龄>20 4.分析下列DTD文档,上机编写有效的XML文档,并进行验证。 ]> 5.利用Schema定义XML文档 (1)对以下“个人信息.xml”进行Schema定义(设Schema文件名为“个人信息.xsd”) XML实用培训教程 张健飞 zjf@https://www.doczj.com/doc/789482380.html, 27元

xml文档

XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); foreach (XmlElement elem in xDoc.SelectNodes("/data/a/item")) Console.WriteLine(lst.InnerText); Console.ReadKey(); static void Main(string[] args) { XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); XmlNodeList lst = xDoc.ChildNodes[1].ChildNodes[1].ChildNodes ; for (int i=0;i< lst.Count ;i++) Console.WriteLine(i.ToString()+lst.Item(i).Name ); foreach (XmlNode n in lst) Console.WriteLine(https://www.doczj.com/doc/789482380.html, ); Console.ReadKey(); } 读取有namespace的Xml 1001 2001 10055 120011 2000 static void Main(string[] args) { XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); XmlNamespaceManager ns = new XmlNamespaceManager(https://www.doczj.com/doc/789482380.html,Table ); ns.AddNamespace("smmd", "nxchj"); foreach (XmlElement elem in xDoc.SelectNodes("/smmd:name/smmd:a",ns)) Console.WriteLine(elem.InnerText ); Console.ReadKey();

xml复习文档

GML->SGML->XML XML将文档看成元素的集合,每个元素由包裹着内容的标签来表示,即:XML文档=元素+标签。 分析元素: ●分析元素的数量,寻找出一共要哪些元素。这个任务通常通过观察排版格式与内容 来获得,如题目、作者、段落等。 ●把握元素间关系,体现XML元素层次结构化的特点。 文档结构的限制:对不同类型的文档,业界对元素出现的位置、顺序、次数等有约定XML。对结构的约束有两套方案:DTD与XML Schema。二者的区分在于DTD的语法与XML不同,DTD相对简单一些。 XML文档的规范性与有效性 对XML文档的称呼有:规范的、合法的、有效的、结构完整的。其实XML本身就是规范文件构造的标准。 ?规范的XML文档:符合W3C制定的XML基本语法规则的文档称为规范的XML文档,也称为结构良好/完整的(well-formed)XML文档。能够被XML解析器正确地解析,但不一定能够良好地展示数据的层次、结构、关联和含义。 ?有效的XML文档:规范的XML文档再符合额外的一些约束才能称为有效的(valid)XML 文档。很显然,“有效”比“规范”要求高。 符合XML基本语法的XML文档只是基本合格,还应在数据层次结构上作必要的约束才能更好地解析其中的数据,体现数据的层次和内容。这种约束交给DTD或XML Schema完成。换言之,一个规范的XML文件如果与某个DTD或XML Schema文档相挂钩,并遵守该文档约定的限制条件,那这个规范的XML文件同时也是一个有效的XML文档,或称合法的XML文档。因此,有效=实用。 -----xml声明 有效的XML文档由五个部分构成 ?XML声明(prolog) ?文档类型声明 ?元素 ?注释 ?处理指令 名称空间:标识不同来源的数据源 解决同一XML文档内部或不同XML文档出现相同标记问题。 例:

xml文档设计

学生实验报告 学院: 课程名称: 专业班级: 姓名: 学号:

学生实验报告 学生姓名学号 同组人:无 实验项目XML文档设计 □必修■选修□演示性实验□验证性实验■操作性实验□综合性实验实验地点H123 实验仪器台号1台 指导教师钟元生实验日期及节次2011.5.20上午第2.3节课 一、实验综述 1、实验目的及要求 目的: 1.了解XML的主要技术,学会编写简单的XML文档; 2.了解XML与HTML的不同。 3.掌握在DTD文档中声明元素,属性的各种方法; 2、实验仪器、设备或软件 仪器设备:电脑一台 二、实验过程(实验步骤、记录、数据、分析) 本实验第一部分: Step1:根据老师的要求编写课堂上所讲述的XML实例;实例的内容是:(1)建立一个联系人列表XML文档,分别使用内部,外部DTD定义文档的有效性。该文档包括联系人基本信息,联系人(姓名,ID,公司,EMAIL,电话,地址),其中地址又包括地址(街道,城市,省份)。 Step2:在程序->附件->记事本,点击建立记事本,将下列三段放在记事本中并另存为:三个文 件,记得在另存为的时候要对文件名加上双引号,三段文档代码分别是: mystyle.xsl

用xml编写一个信息表格

实验报告 一、实验目的 (1)掌握XML文档的基本语法,能够得到格式良好的XML文档; (2)能够了解并掌握XML DTD的定义方法及其用途; (3)能够熟练使用XMLSPY来创建DTD文件及对应的有效的XML文件,并进行验证; (4)掌握使用XSL显示XML文件的基本方法; 二、实验仪器或设备 学院提供公共机房,1台/学生微型计算机。 三、总体设计(设计原理、设计方案及流程等) (1)内含目前受欢迎的六部动漫的各种信息。每个动漫至少包含以下信息: a、名字:必须有一个,其中包含一个超级链接,点击超级链接可以链接到相关视频网站; b、地区:必须含有一个; c、作者:内含有两个子标记,姓名和所属出版社; d、类型:有四个外部引用; e、声优:每一个都有属性; f、是否完结:必须含有一个; g、集数:每一个都有属性,类型是REQUIRED型; h、图片:必须含有一个; (2)为该XML文档,编写DTD文档。 (3)为该XML文档,编写XSL文档,要求以表格的形式输出动漫信息。 四、实验步骤(包括主要步骤、代码分析等) 1.部分xml源文件

2.全部dtd文件 3.部分xsl文件

4.最终显示图

5.名字的超链接网站截图(以第一个为例,其他类似)

五、结果分析与总结 1.最终结果以表格的形式显示出,且有背景音乐和超链接地址; 2.书本上的例子很具有代表性,可以做为参考; 3.做的过程中为了显示结果的美观,加入了大量的HTML的标记; 4.由于是截图形式,打印出来效果会差一点; 5.做的过程中应该认真仔细,一个符号的错误就可能导致运行不出来; 6.最终结果自己也比较满意,也是对老师和自己交出的一个好成绩; 教师签名: 年月日

xml解析_读取xml文件中的内容

1.xmlFile/province.xml 北京市:110000 天津市:120000 河北省:130000 山西省:140000 内蒙古自治区:150000 辽宁省:210000 2.xmlFile/city.xml 北京市:110100 天津市:120100 石家庄市:130100

唐山市:130200 秦皇岛市:130300 邯郸市:130400 邢台市:130500 保定市:130600 张家口市:130700 承德市:130800 沧州市:130900 廊坊市:131000 衡水市:131100 太原市:140100 大同市:140200 阳泉市:140300 长治市:140400 晋城市:140500 朔州市:140600 忻州地区:142200

相关主题
文本预览
相关文档 最新文档