亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区

您現(xiàn)在的位置: > 技術(shù)沙龍 > WEB開發(fā) > XML > xml常見問題
  • 相關(guān)軟件
    >xml常見問題 創(chuàng)建者:webmaster 更新時間:2005-06-09 00:00

    A.概述性問題

       A.1 什么是XML?

       XML 全稱是“可擴展標(biāo)識語言“(Extensible Markup Language)。之所以稱之為可擴展,是因為它不像HTML 那樣只有固定的形式。它是被用來使SGML 能在萬維網(wǎng)上能應(yīng)用自如。

       XML并不是一個獨立的,預(yù)定義的標(biāo)識語言。它是一種元語言。它是用來描述其他語言的語言。它允許你自己設(shè)計你的標(biāo)識。(HTML 是一種預(yù)定義的標(biāo)識語言。HTML 只是在一類特定的文件中定義了一種描述信息的方法。而XML 能允許你在不同的文件中定義你自己設(shè)計的標(biāo)識語言。)這是因為XML 是用SGML (“通用標(biāo)識語言標(biāo)準(zhǔn)”國際標(biāo)準(zhǔn)的標(biāo)識元語言)書寫的?!?BR>
       A.2 XML的目的是什么?

       XML是被設(shè)計用來使SGML 能在萬維網(wǎng)上能自如應(yīng)用的:方便地定義文件類型,方便地制作和管理用SGML定義的文件,在網(wǎng)上方便地傳輸和共享這些文件?!?BR>
       A.3 什么是SGML?

       SGML的全稱是“Standard Generalized Markup Language“(通用標(biāo)識語言標(biāo)準(zhǔn))。它是國際上定義電子文件結(jié)構(gòu)和內(nèi)容描述的標(biāo)準(zhǔn)。在往上有以下相關(guān)資源:

       SGML FAQ: http://www.infosys.utas.edu.au/info/sgmlfaq.txt

       SGML 主頁: http://www.oasis-open.org/cover/sgml-xml.html 

       A.4 什么是HTML?

       HTML的全稱是“HyperText Markup Language “(超文本標(biāo)識語言)。它是SGML在網(wǎng)絡(luò)上的一個特殊應(yīng)用。

       A.5 XML,SGML,HTML是不是一回事?

       不竟然。SGML是XML和HTML的母語言。SGML的覆蓋面很廣。它幾乎涉及人們生活的每一個領(lǐng)域。它被用來描述成千上萬中文件。HTML只是其中一種文件類型,是一種在網(wǎng)上最常用的類型。它定義了一種簡單而固定且含標(biāo)識的文件類型。

       XML是SGML的簡化版。為了實現(xiàn)更加方便地編寫和理解應(yīng)用程序,更加方便地在網(wǎng)絡(luò)上傳輸信息,更加方便地實現(xiàn)互操作性,XML申略了一些SGML中復(fù)雜和不常用的部分。但XML還能和SGML一樣通過解析。

       A.6 SGML/XML 和C/ C++?什么不同?

       C和C++和Fortran, Pascal, Basic, 或是Java一樣都是編程語言。是用來制定運算和操作的。

       而SGML和XML標(biāo)是說明性的語言。它們是用來表現(xiàn)信息的。它們使得信息能被程序正常地存儲傳輸和處理。就它們本身而言,并不能產(chǎn)生什么操作。操作要由應(yīng)用程序來實現(xiàn)?!?BR>
       A.7 是由誰負(fù)責(zé)XML?

       XML是W3C(World Wide Web Consortium 萬維網(wǎng)絡(luò)聯(lián)盟)的一個項目。XML不是任何一家公司的私有財產(chǎn)?!?BR>
       A.8 為什么XML是一項重要的技術(shù)?

       應(yīng)為它解決了兩個制約網(wǎng)絡(luò)發(fā)展的問題:

       1.基礎(chǔ)是單一固定的文件類型。(HTML);

       2.完整的SGML過于復(fù)雜?!?BR>
       A.9 為什么不只是擴展HTML?

       不同的廠家在開發(fā)HTML時產(chǎn)生了許多有趣但卻不兼容的發(fā)明。這已使HTML不堪重負(fù)。因為這使得你只能用一種方法表現(xiàn)你的信息。XML卻允許許許多多的個人與組織來創(chuàng)造他們自己的標(biāo)識語言。應(yīng)用這些標(biāo)識語言他們可以在自己的領(lǐng)域內(nèi)自由地交換信息。HTML在表現(xiàn)信息方面是有缺陷的。當(dāng)然我們必須承認(rèn)它現(xiàn)在仍然扮演著重要的角色。但許多新的應(yīng)用領(lǐng)域需要更加強大和靈活的工具?!?BR>
       B.SGML的使用(包括HTML的各種瀏覽器) 

       B.1 為什么我們要推薦XML而不主張HTML?

       1.我們可以用XML設(shè)計自己的文件類型。

       2.信息的內(nèi)容將更加豐富,更加方便使用。在XML中超文本鏈接的能力比HTML更強。

       3. XML能使得瀏覽器的表現(xiàn)形式更加豐富。

       4.處理XML文件比.處理SGML文件來得簡單。信息的開放性和重復(fù)使用的性能斗將提高。

       5.合法(Valid 參見D中Valid與-formed)的XML文件在SGML中也是合法的。

       B.2 我是不是必須由SGML或是HTML轉(zhuǎn)向XML?

       不是的。現(xiàn)存的SGML和HTML的應(yīng)用軟件仍能正常處理現(xiàn)有的文件。 

       C. SGML 和HTML的編寫

       C.1 XML是否已取代了HTML?

       沒有。XML并沒有取代HTML。它只是給了你一種新的選擇。HTML將仍在一段時間內(nèi)廣泛地被使用。HTML的DTD(參見C中DTD)將既有XML版本,又有SGML版本。但XML版本更加簡單?!?BR>
       C.2 XML文件是怎樣的?

       它的基本結(jié)構(gòu)和SGML和HTML差不多。XML文件可以非常簡單。它可以不需要文件類型說明,而直接就是你自己設(shè)計的內(nèi)嵌式標(biāo)識。如下面一段代碼:

      
    <?xml version="1.0" standalone="yes"?>

      
    <conversation>

      
    <greeting>Hello, world!</greeting>

      
    <response>Stop the planet, I want to get off!</response>

      
    </conversation>

       當(dāng)然它也可以更加復(fù)雜些。如DTD聲明,內(nèi)嵌子集,等等:

      
    <?xml version="1.0" standalone="no" encoding="UTF-8"?>

      
    <!DOCTYPE titlepage SYSTEM "http://www.frisket.org/dtds/typo.dtd"

       [<!ENTITY % active.links "INCLUDE">]>

      
    <titlepage>

      
    <white-space type="vertical" amount="36"/>

      
    <title font="Baskerville" size="24/30" alignment="centered">Hello, world!</title>

      
    <white-space type="vertical" amount="12"/>

      
    <!-- In some copies the following decoration is hand-colored, presumably by the author -->

      
    <image location="http://www.foo.bar/fleuron.eps" type="URL" alignment="centered"/>

      
    <white-space type="vertical" amount="24"/>

      
    <author font="Baskerville" size="18/22" style="italic">Vitam capias</author>

      
    </titlepage> 

       C.3 是不是HTML有一個XML版本?

       已經(jīng)有好幾個HTML的XML版本,但都只是在準(zhǔn)備階段,并未完成。 

       C.4 既然說XML是SGML的子集,我能不能用SGML的工具直接處理XML文件?

       是的.而且非常簡單。一個結(jié)構(gòu)完整的XML文件和HTML文件非常相像。當(dāng)然也有一些小的而且是重要的不同。在實際操作當(dāng)中最大的不同就是XML文件必須搖遵守一定的法則。HTML的瀏覽器可以允許一些小的錯誤。而如果是XML就行不通了。

       C.5 什么是DTD?我能在哪兒找到?

       DTD的全稱是“Document Type Definition“(文件類型定義)。具體地說,DTD是一個或是一些用XML書寫的文件。它包含了對一種文件的正式定義。它定義了文件中的元素能用什么名字,能放在什么位置,應(yīng)該怎樣組合。在這里舉一個簡單的例子。比如說你想要你的文件可以描述一組<List>,其中每個<List>由可以包含若干個<Item>。那么你的DTD中應(yīng)該有以下語句:<!ELEMENT List (Item)+>

      
    <!ELEMENT Item (#PCDATA)>

       這樣一個框架定義了一個表(list),它可以包含若干個項(items)。每一個項只能包括文本的內(nèi)容。當(dāng)處理器處理XML文件時將自動檢查DTD,以此確定文件中元素從哪而來,以及它們之間是什么關(guān)系。上面的框架允許你生成下面的一個表:

      
    <List><Item>Chocolate</Item><Item>Music</Item><Item>Surfing</Item></List>

       而這樣一個表在屏幕上是怎樣一個表象,取決于你的樣式表(Stylesheet)。在HTML中你要在文件中指定應(yīng)是怎樣的形式。使用DTD表明你能夠確定一類文章的結(jié)構(gòu)和格式。

       要想找一個DTD看看嗎?實際上,各個領(lǐng)域里的SGML DTD由成千上萬。你可以參看SGML 的網(wǎng)頁?!?BR>
       C.6 我總是聽說DTD的替代者Schema,它到底是什么?

       有許多XML的開發(fā)者并不滿意XML的規(guī)范。原因有兩點:

       1.既然XML在說明結(jié)構(gòu)信息是有很多好處,那么用來描述文件類型的結(jié)構(gòu)的文件(這就是Schema)為什么不是也用XML書寫的呢?這樣做的好處不光是統(tǒng)一,而且便于用正規(guī)的文件工具編輯管理Schema。

       2.過去的DTD對數(shù)據(jù)的限制不夠。比如說你想要一個元素只取負(fù)值,或是必須有一個值,DTD很難做到?!?BR>
       C.7 我能用XML作算術(shù)運算嗎?

       只要你的文件類型提供算術(shù)類型,知識可以的。W3C已經(jīng)有了一個MathML(Mathematical Markup Language數(shù)學(xué)標(biāo)識語言)的計劃。清參看W3C最新(1999年7月)發(fā)布的MathML規(guī)范。

       C.8 在XML中,我能使用Java, ActiveX嗎?

       這取決于瀏覽器制造者運用的工具. XML是用來描述信息的; 描述性語言和用來描述內(nèi)嵌函數(shù)功能的語言的目的是使得信息能在客戶端被操作.. XML本身提供了一種定義標(biāo)識的方法,而這些標(biāo)識是描述性語言所必需的. XML是一個中立的標(biāo)準(zhǔn).他不支持或是反對任何一種描述性語言.所以說它是一個開放的領(lǐng)域. 描述性語言是在”Extensible Style Language”XSL (可擴展類型語言).計劃中提出的.

       C.9 我能用Java編寫或是管理XML文件嗎?

       可以.我們可以用任何一種編程語言從任何一種XML格式的信息中提取數(shù)據(jù).

       D.高級開發(fā)者和應(yīng)用者(包括網(wǎng)絡(luò)管理員和服務(wù)器操作人員)

       D.1哪兒可以找到XML的規(guī)范?

       請參見: http://www.w3.org/TR/REC-xml

       D.2 "DTDless" ,"valid",和"well-formed"這些術(shù)語是什么意思?

       在完整的SGML中,我們用DTD描述特定文件中的各種標(biāo)識.但DTD的生成是一件極其復(fù)雜的工作.所以XML被設(shè)計成可以缺省DTD. DTDless表示您可以創(chuàng)造一個標(biāo)識而不需正式的定義.當(dāng)然這也要付出代價.您不能在其他的文件中對同樣的形式采用自動的處理. DTDless的文件是以一種非正式的方式定義它的標(biāo)識的.標(biāo)識是在哪兒出現(xiàn)的就在哪兒定義它.但當(dāng)一個比方說是瀏覽器的XML應(yīng)用程序打開了一個DTDless的文件,它必須要有辦法來理解文件的結(jié)構(gòu).但它又沒有DTD,所以規(guī)則上有了一些改變. 舉一個例子:

       HTML中的<img> 是被定義為”EMPTY”(空)的.它并不需要”end-tag”(結(jié)尾標(biāo)簽). DTD 的XML應(yīng)用程序在打開一個缺省DTD. 的文件,讀到<img>時不知道是否需要一個”end-tag”.所以”well-formed”(結(jié)構(gòu)良好)的定義也變得重要了. ”well-formed”可以使得一般元素和”EMPTY”元素區(qū)分開來.

       D.2.1 ”well-formed”(結(jié)構(gòu)良好的)文件

       1.如果一個文件沒有DTD,它必須在開頭處有一個"Standalone Document Declaration"(獨立文件聲明):

      
    <?xml version="1.0" standalone="no" encoding="UTF-8"?>

      
    <foo>

       . <bar> ...<blort/>...</bar>

      
    </foo>

       2.除了空素以外, 標(biāo)記必須前后匹配.

       3.所有的”attribute”值都要用引號括起來.

       4. ”EMPTY”元素的tag要么用”/>”結(jié)尾,要么要補成”non-EMPTY”(非空)的元素. 比如說: <BR>要么寫為<BR/> 或是<BR></BR>

       5.文件中必須不能出現(xiàn)”markup-start “(標(biāo)識開始符), 比如”<”或是“&”.

       6.元素必須遵守SGML的規(guī)則,正確嵌套.

       D.2.2”Valid “(合法的)XML

       合法的XML是指有DTD的文件.它必須是”well-formed”的.

       D.3 在DTD中,我什么時候用屬性, 什么時候用元素?

       這并沒有唯一的答案.著取決于您設(shè)計文件的風(fēng)格.以下是兩個極端的例子,它們的功能是一樣的:

       1. <l n="184"><sp>Portia</sp><text>The quality of mercy is not strain’d,</text></l>

       2. <line speaker="Portia" text="The quality of mercy is not strain’d">184</line>

       D.4 SGML 和XML之間還有什么區(qū)別?

       主要的區(qū)別在于DTD的內(nèi)容.為了簡化語法和編寫軟件的過程, XML中對SGML做了很大縮減.

       D.5 現(xiàn)在有哪些XML的軟件可以使用?

       由于更新速度太快,我們建議您參看: http://www.oasis-open.org/cover/xml.html.

       D.6 要使用XML,我是否要改變服務(wù)器的軟件?

       要的,但改動不大.您只要編輯您的mime-types文件,加上以下一句:

       application/xml xml XML

    經(jīng)典問答


    一.HTML已經(jīng)這樣流行了,為什么還要發(fā)展XML?

     

      簡單地講,HTML不能完成,我們希望XML所要完成的任務(wù)。原因很簡單,XML所要完成的任務(wù),必須由元置標(biāo)語言來完成,而HTML只是一個實例置標(biāo)語言。 在XML發(fā)布之前,國際互聯(lián)網(wǎng)的發(fā)展受到HTML如下幾個問題的束縛:

    1) HTML無法描述數(shù)據(jù)內(nèi)容,而這一點恰恰是數(shù)據(jù)檢索、電子商務(wù)所必須的。

    2) HTML對數(shù)據(jù)表現(xiàn)的描述能力是十分不夠的,如HTML還不能描述矢量圖形、  科學(xué)符號等對象,目前只能通過圖象來表現(xiàn)這些對象。

    3) HTML實例置標(biāo)語言的地位,完全不能適應(yīng)對新標(biāo)記需求的發(fā)展需要。

       XML的出現(xiàn),使上述問題都得到很好的解決。

    試想在互聯(lián)網(wǎng)世界,如果大家都講方言,互相交換信息時都要進行翻譯,那將是一個多么難以溝通和交流的世界。在互聯(lián)網(wǎng)世界,XML之所以重要,恰恰是由于它扮演了"國際語言"角色的緣故。此外,XML更為互聯(lián)網(wǎng)世界提供了定義各行各業(yè)的"專業(yè)術(shù)語"的工具。



    二.如何在瀏覽器中閱讀XML?



    閱讀XML文檔的工具一般稱為XML解析器, 也稱為XML處理器。 XML處理器將數(shù)據(jù)傳送到應(yīng)用軟件, 以便處理, 出版, 查詢, 或顯示。XML不給應(yīng)用軟件提供 應(yīng)用程序接口 (API), 它只是把數(shù)據(jù)傳給應(yīng)用軟件. XML處理器不解析非構(gòu)造良好的數(shù)據(jù)。 Netscape 和 Microsoft 都已經(jīng)將XML解析器包含在其瀏覽器中。 XML開發(fā)者團體提供免費的XML閱讀器和解析器, 以便在應(yīng)用軟件或XML制作軟件中進行應(yīng)用。



    三.為什么要使用XML而不是HTML?



    比較重要的原因有以下六條:

       1)作者和供應(yīng)商能使用XML設(shè)計自己的文檔類型,不必被HTML所約束。

      2)由于XML的超文本鏈接能力比HTML強得多,XML提供的信息內(nèi)容比      HTML更豐富,也更易于使用。

       3)XML能提供更多更好的機制方便瀏覽器的信息表現(xiàn)和優(yōu)化性能。

       4)XML舍棄了SGML的復(fù)雜性,因此編寫處理XML的應(yīng)用程序會很容易。

       5)信息易于存儲,可重復(fù)使用。

       6)XML文件在SGML環(huán)境中也可使用,不一定要局限于在WEB中使用。



    四.可以用Java創(chuàng)建和管理XML文件嗎?



    是的,任何程序設(shè)計語言都能被用來從XML形式的源文檔中輸出數(shù)據(jù)。已經(jīng)出現(xiàn)了許多的前端和后臺工具使得程序設(shè)計和數(shù)據(jù)管理更加方便。下面兩個網(wǎng)址有更加詳細的說明: http://www.markwatson.com/XMLdb_0_1.htm http://developerlife.com



    五.為什么XML文件的分析結(jié)果出現(xiàn)亂碼?



    這是由編碼問題引起的。XML標(biāo)準(zhǔn)規(guī)定,XML分析器必須支持“UTF-8”和“UTF-16”編碼,而且必須能夠自動區(qū)分這兩種編碼的文件,對于其他編碼(包括常用的中文編碼“GB2312”或“BIG5”)并不要求支持。如果XML文件中包含編碼聲明,分析器則按照聲明的編碼進行處理,否則就按照識別結(jié)果進行處理(識別的結(jié)果總是“UTF-8”和“UTF-16”中的一種)。因此,如果XML文件的編碼在這兩種之外,你必須在XML文件前加上編碼聲明,如:<?xml version="1.0" encoding="gb2312"?>就表示XML文件的編碼是“gb2312”。



       現(xiàn)有的XML分析器大多不支持中文編碼“GB2312”或“BIG5”,因此無法讀取包含中文的XML文件。你可以使用支持中文編碼的分析器,如MSXML,IBMJAVA4C,IBMJAVA4J等進行XML分析。你也可以用內(nèi)碼轉(zhuǎn)換工具,將編碼轉(zhuǎn)換為“UTF-8”或“UTF-16”后進行解析,然后將解析結(jié)果轉(zhuǎn)換回原來的編碼。本站的軟件園地中的ccnv(Code Converter)就是這樣的工具。當(dāng)然,你也可以自己寫一個內(nèi)碼轉(zhuǎn)換程序。



       關(guān)于“UTF-8”和“UTF-16”編碼的詳細信息,請查看本站標(biāo)準(zhǔn)薈萃中的UTF-16和UTF-8標(biāo)準(zhǔn)。



    六.XML如何與數(shù)據(jù)庫連接?





    XML是一種文件格式,它沒有規(guī)定與數(shù)據(jù)庫的連接方法,你需要用傳統(tǒng)的方法連接數(shù)據(jù)庫,進行數(shù)據(jù)庫查詢,然后將查詢結(jié)果轉(zhuǎn)化為XML格式?,F(xiàn)在有一些工具提供了XML與數(shù)據(jù)庫的連接過程大都遵循這樣的步驟。下面是一個利用ASP直接生成XML文件的例子,你可以訪問http://www.xml.net.cn/Asps/test/roster1.asp查看執(zhí)行效果。



    <%@ language="VBScript" %>

    <?xml version="1.0" encoding="gb2312"?>

    <?xml:stylesheet type="text/xsl" href="..image oster.xsl"?>

    <roster>

    <%

    set cConn = Server.CreateObject("ADODB.Connection")

    call cConn.Open("DSN","USER", "PWD")

    set rs = cConn.Execute("SELECT DISTINCT * FROM roster")

    Do While Not rs.EOF %>

    <Record>

    <Name><%=trim(rs("name"))%></Name>

    <NativePlace><%=trim(rs("NativePlace"))%></NativePlace>

    <Age><%=trim(rs("Age"))%></Age>

    <Telephone><%=trim(rs("Telephone"))%></Telephone>

    </Record>

    <% rs.MoveNext

    Loop

    rs.Close

    set rs=nothing

    set cConn=nothing

    %>

    </roster>


    xml應(yīng)用實例


    本文介紹3個XML的基本應(yīng)用實例,旨在帶領(lǐng)你快速步入XML編程世界。實例包括:在.NET中使用XML、讀取XML文件,插入數(shù)據(jù)到XML文檔中。

         在.NET中使用XML

       如果使用過MSXML3,那么在.NET應(yīng)用程序中使用XML將是一個相當(dāng)簡單的過程。即時沒有接觸過MSXML3,也不要緊,你會發(fā)現(xiàn)使用.NET平臺提供的相關(guān)類也是很容易的一件事情。

       有兩種主要API可用于訪問建立在XML文檔中的數(shù)據(jù),它們包括只向前的無緩沖存取以及隨機存取,而且自始至終都使用到文檔對象模型DOM。有關(guān)這2個API的類位于System.XML集合中。

       如果要快速有效地訪問XML文檔中的數(shù)據(jù),就需要使用XmlTextReader類。這個類采取“拉”模式處理方式,要比簡單XML API(SAX)中的“推”模式處理方式優(yōu)越許多。使用XmlTextReader類之前首先要引用System.Xml集合,在C#中是使用“using”關(guān)鍵字來引用,在Visual Basic中則是使用“imports”關(guān)鍵字。引用了集合后,就可以象下面的代碼所示開始例示讀操作了:

       XmlTextReader reader = new XmlTextReader(pathToXmlDoc);

       int elementCount = 0;

       while (reader.Read()) {

       if (reader.NodeType == XmlNodeType.Element) {

       elementCount++;

       }

       }

       XmlTextReader類中有幾個不同的構(gòu)造器,上面所示的負(fù)責(zé)接收一個XML文件的路徑作為字符串參數(shù)。

       雖然只向前的“拉”模式處理相當(dāng)有效率,但它卻是只讀的,所以不能允許執(zhí)行插入、刪除或者更新XML文檔節(jié)點的操作。當(dāng)需要對XML文檔施加更多的控制并需要更大的靈活性時,我們可以看一看文檔對象模型DOM。DOM API的功能將XML文檔中的每一個節(jié)點裝載到一個樹形結(jié)構(gòu)中,看起來就象是一個“家譜”。內(nèi)存中有了這個結(jié)構(gòu),隨機存取XML文檔中的不同節(jié)點就變得可行。

       開始創(chuàng)建DOM樹形結(jié)構(gòu)前,首先引用System.Xml集合,然后例示XmlDocument類:

       XmlDocument xmlDoc = new XmlDocument();

       xmlDoc.Load(pathToXmlDoc);

       XmlNode root = xmlDoc.DocumentElement;

       通過使用XmlDocument類中的相關(guān)方法,在樹形結(jié)構(gòu)中添加節(jié)點的操作可以很容易地完成。下面的例子演示了如何從一個文件中裝載XML,然后在根節(jié)點root下添加一個子元素以及它的相關(guān)屬性:

       XmlDocument xmlDoc = new XmlDocument();

       XmlDoc.Load(pathToXmlDoc);

       XmlElement root = xmlDoc.DocumentElement;

       XmlElement newNode = doc.CreateElement("newNode");

       newNode.SetAttribute("id","1");

       root.AppendChild(newNode);

       以上代碼執(zhí)行后,將產(chǎn)生下面的XML文檔:

      
    <?xml version="1.0"?>

      
    <root>

      
    <newNode id="1"/>

      
    </root>

       當(dāng)需要將包含XML的字符串裝載進DOM中時,可以使用XmlDocument類的LoadXml()方法。裝載進去后,就可以按照下面的方式操作XML:

       string myXml = "<root><someNode>Hello</someNode></root>";

       XmlDocument xmlDoc = new XmlDocument();

       xmlDoc.LoadXml(myXml);

       //....manipulation or reading of the nodes can occur here

       除了以上幾種,在System.Xml集合中還有多種其他類可用于執(zhí)行不同的任務(wù)。上面的介紹僅僅是淺嘗則止,大量的應(yīng)用還需要更多的練習(xí)。

       讀取XML文件

       下面介紹如何使用XmlTextReader類讀取XML文檔,并將數(shù)據(jù)顯示輸出。

       System.XML名稱空間中定義了兩個類-XmlReader與XmlTextReader,其中XmlTextReader類來源于XmlReader類,而XmlTextReader類就可以用于讀取XML文檔,這個文檔的Read函數(shù)將讀取文檔內(nèi)容,直到節(jié)點尾部。

       以下是具體的實現(xiàn)步驟:

       1、引用名稱空間

       因為相關(guān)XML的類是在System.XML名稱空間中定義的,所以第一件事情就是引用這個名稱空間:

       using System.Xml;

       2、打開XML文檔

       XmlTextReader類的構(gòu)造器可用于打開一個XML文件。本例程的XML文件叫做xmltest.xml,位于C:\temp目錄下。打開文件c:\temp\xmltest.xml的命令如下:

       XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml");

       3、讀取數(shù)據(jù)

       讀取XML文件的數(shù)據(jù),可以使用XmlTextReader類的Read方法:

       while ( reader.Read() )

       {

       Console.WriteLine(reader.Name);

       }

       4、完整執(zhí)行代碼readxml.cs

       namespace WriteToXML

       {

       using System;

       using System.Xml;

       /// <summary>

       /// Summary description for Class1.

       /// </summary>

       public class Class1

       {

       public Class1()

       {

       }

       public static int Main(string[] args)

       {

       try

       {

       XmlTextWriter writer = new XmlTextWriter("C:\\temp\\xmltest.xml", null);

       writer.WriteStartDocument();

       writer.WriteComment("Commentss: XmlWriter Test Program");

       writer.WriteProcessingInstruction("Instruction","Person Record");

       writer.WriteStartElement("p", "person", "urn:person");

       writer.WriteStartElement("LastName","");

       writer.WriteString("Chand");

       writer.WriteEndElement();

       writer.WriteStartElement("FirstName","");

       writer.WriteString("Chand");

       writer.WriteEndElement();

       writer.WriteElementInt16("age","", 25);

       writer.WriteEndDocument();

       }

       catch (Exception e)

       {

       Console.WriteLine ("Exception: {0}", e.ToString());

       }

       return 0;

       }

       }

       }

       插入數(shù)據(jù)到XML文檔中

       要實現(xiàn)將XML數(shù)據(jù)插入到一個現(xiàn)存文檔或者一個新文檔中的目的,可以使用XmlNode類和XmlDocument類。具體的實現(xiàn)步驟如下:

       1、引用名稱空間

       因為相關(guān)XML的類是在System.XML名稱空間中定義的,所以第一件事情就是引用這個名稱空間:

       using System.Xml;

       2、裝載XML到文檔中

       我們可以使用XmlDocument的LoadXml方法將XML數(shù)據(jù)裝載到一個文檔中,或者是裝載一個現(xiàn)存的XML文檔。下面的代碼裝載XML數(shù)據(jù)到文檔中:

       XmlDocument doc = new XmlDocument();

       doc.LoadXml("<XMLFile>" +

      
    " <SomeData>Old Data</SomeData>" +

      
    "</XMLFile>");

       3、插入XML數(shù)據(jù)

       下面的代碼將XML數(shù)據(jù)插入到文件中,然后保存為InsertedDoc.xml:

       try

       {

       XmlNode currNode;

       XmlDocument doc = new XmlDocument();

       doc.LoadXml("<XMLFile>" +

      
    " <SomeData>Old Data</SomeData>" +

      
    "</XMLFile>");

       XmlDocumentFragment docFrag = doc.CreateDocumentFragment();

       docFrag.InnerXml="<Inserted>" +

      
    " <NewData>Inserted Data</NewData>" +

      
    "</Inserted>";

       // insert the availability node into the document

       currNode = doc.DocumentElement.FirstChild;

       currNode.InsertAfter(docFrag, currNode.LastChild);

       //save the output to a file

       doc.Save("InsertedDoc.xml");

       }

       catch (Exception e)

       {

       Console.WriteLine ("Exception: {0}", e.ToString());

       }

       代碼執(zhí)行后,新文檔的內(nèi)容如下:

       - <XMLFile>

       - <SomeData>

       Old Data

       - <Inserted>

      
    <NewData>Inserted Data</NewData>

      
    </Inserted>

      
    </SomeData>

      
    </XMLFile>(完)


    xml的應(yīng)用是什么?xml到底能做什么?


      首先說,xml的技術(shù)有兩項的很顯著的特點。

    1,數(shù)據(jù)和現(xiàn)實的分離。

    2,數(shù)據(jù)的自描述性。

    下面我就從這兩個方面,結(jié)合自己的經(jīng)驗和叢書中了解的知識,簡單的談一下。

    第一:數(shù)據(jù)和現(xiàn)實的分離。

    比如說你手頭上有一篇的資料(我們這里先假定是文字的資料,因為如果涉及到圖,影像等范圍就太廣了,也不是我只能力所及),是xml的數(shù)據(jù)的格式,好了,如果你的客戶想通過互聯(lián)網(wǎng)看看你的資料。你就可以使用一個aaa.xsl把你的xml的數(shù)據(jù)格式化為HTML的格式,同時這里面有個補充一點,因為你可以控制你要顯示的內(nèi)容,你可以過濾掉對于客戶不能看到的信息。但是這里面你并沒有動原來的數(shù)據(jù)。

    如果你的老板想把資料打印出來,作為報表向上級匯報,還是用原來的數(shù)據(jù),再寫一個bbb.xsl,把xml的數(shù)據(jù)輸出為一個漂亮的報表的形式。ok了。

    如果你以前的數(shù)據(jù)是txt的格式,你就必須從新的要做兩種的格式,

    一個html的,一個報表的。你的工作最多時copy,copy的

    2,數(shù)據(jù)的自描述性。

    比如說我的個人信息。

    對于數(shù)據(jù)庫來說,可能建立一個users的表。建立不同的字段。

    數(shù)據(jù)取得可以是

    rs("name")="jiangtianpeng"

    rs("Emial")="wfxian@263.net"

    rs("Id")="dadapeng"

    但是沒有了rs或者對于外部來說又如何的區(qū)分id和name的區(qū)別。

    dadapeng是id?還是name?

    jiangtianpeng是name?還是id?


    ok

    用xml描述一下個人信息

    <person>

    <name>jiangtianpeng</name>

    <id>dadapeng</id>

    <natio>china</nation>

    ....

    <email>wfxian@263.net</email>

    </person>


    是不是一目了然。

    實際上面的問題就涉及到了不同系統(tǒng)之間的xml的交換。xml是不同系統(tǒng)之間的橋梁。


    我談一下我工作的xml經(jīng)驗

    我現(xiàn)在的工作是一個中文,英文,俄文三種語言的網(wǎng)站,

    比如我們通過com組件的得到一個用戶的信息

    可能是

    <user id='feiddd' name_CN="王" name_EN="ddddf"

    name_RU='這里是俄文' 。。。。等等的信息 />


    在中文上就寫一個顯示中文的xsl,

    在英文上就寫一個顯示英文信息的xsl。


    如果不用這種技術(shù),將會很麻煩的。

    相關(guān)文章
    本頁查看次數(shù):