栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 其他 > xml语言

XML解析中的namespace初步了解

xml语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XML解析中的namespace初步了解

初学者在解析XML文件的时候最容易遇到的问题恐怕就是XML的namespace了,本文旨在对namespace做一个简要的介绍。

namespace的意义无需多说,和C++,C#等高级语言一样,XML同样面临大量文件放在一起的时候变量重名的问题,所以要用namespace把名字相同意义不同的变量隔离开。本文着重讨论namespace的解析方法。

以下是一个简单的XML文件:

          hello world            one   

这个例子里面没有namespace,大家初学XML时接触的例子恐怕都是这样的。这种例子具有误导性,初学者解析出了hello world之后就兴高采烈的拿同样的程序去解析实际的XML文件,往往铩羽而归。下面是一段豆瓣API返回的XML文件

  http://api.douban.com/event/10069638  Debugging the Web                     name>胖胖的大头鱼        http://api.douban.com/people/1057620    no

看到这么多www就不想看直接跳过,然后看到熟悉的 , 果断套用上面例子的程序,一运行却啥都得不到,问题到底出在哪?C#提供一大堆的XML类,Xdocument, XReader, XPath, Xmldocument,是不是我现在用的这种类不给力啊,没法确定只好乱试,一乱试一晚上就过去了。童鞋,我们还是静下心来逐行看看吧。

这行没看头,看下面这里no这句话,可以理解了,db是一个namespace的简称,方便写在元素的名字前面,这样, 就不一样了。这种简称可以在一个文档里面区别变量,但是对大量的文档还是不行,所以namespace还有一个全称,就是这里的http://www.douban.com/xmlns/。这个全称其实写什么内容都行,对XML Parser来说都是当做字符串来处理的,但一来想名字比较麻烦,二来可以顺道做个广告,所以大家一般都用的网址。Parse的时候Parser根据全称来区别变量,所以就算两个文档中都有,只要全称不一样,都没有问题。

这么说就比较清楚了,但那个http://www.w3.org/2005/Atom到底是个啥啊,连个简称都没有。哎,意识到这个就对了,他的简称就是””,空串。这东西被称为default namespace,那些看上去没有前缀的都是在这个namespace下的。所以那个不是裸的啊,人家其实是 <”http://www.w3.org/2005/Atom” : author> 所以裸的程序当然是解析不了的了。

那么该如何解析呢?这里提供一个样例程序,希望对大家有帮助。这个代码可以在WP7上运行。我还有一个版本用的Xmldocument,尼玛WP7上木有这个类,坑爹的。。。

  string file = @"C:Usersv-menlindocumentsVisual Studio 2010Projectstesttesttest.xml";            Xdocument doc = Xdocument.Load( file );            //use following code to parse a string             //Xdocument doc = Xdocument.Parse( string );            //对于XML文件中所有的没加类似db:这种的元素,用下列方法            XNamespace d = @"http://www.w3.org/2005/Atom";            foreach ( XElement element in doc.Descendants( d + "title" ) )            {                Console.WriteLine( element.Value );            }            //下面包含了,一下的例子还示例了如何读取属性。            foreach ( XElement element in doc.Descendants( d + "author" ) )            {                foreach ( XElement inelement in element.Descendants( d + "link" ) )                {                    Console.WriteLine( inelement.Attribute( "href" ).Value );                    Console.WriteLine( inelement.Attribute( "rel" ).Value );                }            }            Console.WriteLine();            //对于加了冒号前缀的元素,使用下列代码            XNamespace db = @"http://www.douban.com/xmlns/";            foreach ( XElement element in doc.Descendants( db + "attribute" ) )            {                Console.WriteLine( element.Attribute( "name" ).Value );                Console.WriteLine( element.Value );            }            //其实只是NameSpace的头部换了一下。            //下面列出其他几个常用头部,直接换用。            XNamespace gd = @"http://schemas.google.com/g/2005";            XNamespace opensearch = @"http://a9.com/-/spec/opensearchrss/1.0/";

以上就是XML解析中的namespace初步了解的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号