中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

XML解析中namespace有什么用-創(chuàng)新互聯(lián)

這篇文章主要介紹了XML解析中namespace有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),南木林企業(yè)網(wǎng)站建設(shè),南木林品牌網(wǎng)站建設(shè),網(wǎng)站定制,南木林網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,南木林網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

namespace的意義無需多說,和C++,C#等高級語言一樣,XML同樣面臨大量文件放在一起的時候變量重名的問題,所以要用namespace把名字相同意義不同的變量隔離開。本文著重討論namespace的解析方法。

以下是一個簡單的XML文件:

<root>
   <child id = ‘0’> 
      hello world 
   </child>
   <child id='1'>
     one
   </child>
</root>

這個例子里面沒有namespace,大家初學(xué)XML時接觸的例子恐怕都是這樣的。這種例子具有誤導(dǎo)性,初學(xué)者解析出了hello world之后就興高采烈的拿同樣的程序去解析實際的XML文件,往往鎩羽而歸。下面是一段豆瓣API返回的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:db="http://www.douban.com/xmlns/" 
xmlns:gd="http://schemas.google.com/g/2005" xmlns:opensearch="http://a9.com/-/spec/opensearchrss/1.0/">  
<id>http://api.douban.com/event/10069638</id>  
<title>Debugging the Web </title>  
<category scheme="http://www.douban.com/2007#kind" term="http://www.douban.com/2007#event.salon"/>  
<author>    
<link href="http://api.douban.com/people/1057620" rel="self"/>    
<link href="http://www.douban.com/people/aka/" rel="alternate"/>    
<link href="/file/tupian/20230213/404.html" rel="icon"/>
    name>胖胖的大頭魚</name>    
    <uri>http://api.douban.com/people/1057620</uri>
    </author>
<db:attribute name="invite_only">no</db:attribute>

看到這么多www就不想看直接跳過,然后看到熟悉的<author> </author>, 果斷套用上面例子的程序,一運行卻啥都得不到,問題到底出在哪?C#提供一大堆的XML類,XDocument, XReader, XPath, XmlDocument,是不是我現(xiàn)在用的這種類不給力啊,沒法確定只好亂試,一亂試一晚上就過去了。童鞋,我們還是靜下心來逐行看看吧。

<?xml version="1.0" encoding="UTF-8"?>這行沒看頭,看下面這里<entry xmlns="http://www.w3.org/2005/Atom" ,xmlns就是xml namespace的意思,這坑爹的http://www.w3.org/2005/Atom到底是個啥呢。再往后看,xmlns:db="http://www.douban.com/xmlns/" ,結(jié)合<db:attribute name="invite_only">no</db:attribute>這句話,可以理解了,db是一個namespace的簡稱,方便寫在元素的名字前面,這樣<db:attribute> 和 <attribute>, <gd:attribute>就不一樣了。這種簡稱可以在一個文檔里面區(qū)別變量,但是對大量的文檔還是不行,所以namespace還有一個全稱,就是這里的http://www.douban.com/xmlns/。這個全稱其實寫什么內(nèi)容都行,對XML Parser來說都是當(dāng)做字符串來處理的,但一來想名字比較麻煩,二來可以順道做個廣告,所以大家一般都用的網(wǎng)址。Parse的時候Parser根據(jù)全稱來區(qū)別變量,所以就算兩個文檔中都有<db:attribute>,只要全稱不一樣,都沒有問題。

這么說就比較清楚了,但那個http://www.w3.org/2005/Atom到底是個啥啊,連個簡稱都沒有。哎,意識到這個就對了,他的簡稱就是””,空串。這東西被稱為default namespace,那些看上去沒有前綴的都是在這個namespace下的。所以那個<author>不是裸的啊,人家其實是 <”http://www.w3.org/2005/Atom” : author> 所以裸的程序當(dāng)然是解析不了的了。

那么該如何解析呢?這里提供一個樣例程序,希望對大家有幫助。這個代碼可以在WP7上運行。我還有一個版本用的XmlDocument,尼瑪WP7上木有這個類,坑爹的。。。

  string file = @"C:\Users\v-menlin\Documents\Visual Studio 2010\Projects\test\test\test.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 );
            }
            //<author>下面包含了<link>,一下的例子還示例了如何讀取屬性。
            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有什么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

分享標(biāo)題:XML解析中namespace有什么用-創(chuàng)新互聯(lián)
本文來源:http://www.rwnh.cn/article30/cegcso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)域名注冊、做網(wǎng)站網(wǎng)站收錄、響應(yīng)式網(wǎng)站網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
东乡族自治县| 西平县| 普格县| 临湘市| 绥中县| 茂名市| 萝北县| 新乡县| 姚安县| 定日县| 大埔县| 绥滨县| 永州市| 唐海县| 五常市| 汤原县| 普宁市| 江安县| 墨脱县| 比如县| 五莲县| 故城县| 广汉市| 青岛市| 德钦县| 德阳市| 英山县| 无极县| 双牌县| 凤台县| 东光县| 大埔县| 十堰市| 辽中县| 屏南县| 柳江县| 徐水县| 昌黎县| 壤塘县| 获嘉县| 绥芬河市|