名字空間在XML中的應用(原創)

名字空間在XML中的應用

我們可能都編寫過下面這種簡單的XML文檔:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

<數據結構課程>

<老師>

      <職稱>教授</職稱>

      <姓名>張老師</姓名>

      <電話>98989988</電話>

    </老師>

</數據結構課程>

我們可以發現上面的XML文檔元素是比較少的,結構也相對來說比較簡單,比較好實現,但當我們想把這個結構做的更復雜一些,比如說再加上是哪個學校開的這門課,又是哪個系開的這門課等等時,只好再通過增加元素來解決,這樣一來就必須得增加層次結構,很不方便。那麼有什麼辦法可以解決這個問題嗎?

答案是有,我們可以通過名字空間來解決這個問題。

那麼可能有人會問:“什麼是名字空間啊?”。名字空間的英文名字是namespace,顧名思義也就是允許你通過一個網址指向來識別你的標。例如:

<大學:老師 xmlns:大學="http://www.beihang.com">

其中xmlnsXHTML namespace的縮寫,叫做"名字空間"聲明。

爲什麼要使用名字空間呢?因爲我們都知道xml是允許我們自定義標籤的,這樣就有可能我們定義的標籤和其他人定義的標籤相同,但表示的意義可能不同。當文件交換或者共享的時候就容易產生錯誤。

比如說張三和李四都定義了一個<學校>的標籤,張三的<學校>標籤指的是北航,李四的<學校>標籤指的是西工大,那麼當兩個文檔交換數據時,就無法分清這個<學校>標籤到底指的是西工大還是北航,這樣就會出問題了。爲了避免這種錯誤發生,XML採用名字空間聲明,允許你通過一個網址指向來識別你的標籤。例如張三的<學校>標籤的名字空間是"http://www.beihang.com",李四的<學校>標籤名字空間是"http://www.xigongda.com"

那麼如何通過名字空間來實現下面的XML文檔呢?

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

<大學:老師 xmlns:大學="http://www.beihang.com">

<老師:數據結構課程 xmlns:老師="http://www.beihang.com/computer/zhang">

      <老師:職稱>教授</老師:職稱>

      <老師:姓名>張老師</老師:姓名>

      <老師:電話>98989988</老師:電話>

    </老師:數據結構課程>

</大學:老師>

 

源程序如下:

package xml_study;

import org.jdom.*;

import org.jdom.output.XMLOutputter;

import java.math.BigInteger;

import java.io.IOException;

 

public class PrefixedFibonacci {

  public PrefixedFibonacci() {

  }

  public static void  main(String[] args){

Element root = new Element("老師","大學","http://www.beihang.com");

//指的是北航的張老師

    Element mrow = new Element("數據結構課程","老師","http://www.beihang.com/computer/zhang");  //指的是北航計算機系的張老師

    Element mi = new Element("職稱","老師","http://www.beihang.com/computer/zhang");

    mi.setText("教授");

    mrow.addContent(mi);

 

    Element mo = new Element("姓名","老師","http://www.beihang.com/computer/zhang");

    mo.setText("張老師");

    mrow.addContent(mo);

 

    Element mm = new Element("電話","老師","http://www.beihang.com/computer/zhang");

    mm.setText("98989988");

    mrow.addContent(mm);

 

    root.addContent(mrow);

    Document doc = new Document(root);

    try{

      XMLOutputter serializer = new XMLOutputter("  ",true);

      serializer.setEncoding("gb2312");

      serializer.output(doc,System.out);

    }

    catch(IOException e){

      System.err.print(e);

    }

  }

}

該程序在Jbuilder9,Tomcat4.0下運行成功。

名字空間的基本JDOM規則是:當元素或屬性在名字空間中而不是指定完全限定名是,要依次指定本地名,前綴和URI。如果元素在默認名字空間中,則省略前綴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章