<?xml version="1.0"?> <!DOCTYPE poem[ <!ELEMENT poem (author,title,content) > <!ELEMENT author (#PCDATA) > <!ELEMENT title (#PCDATA) > <!ELEMENT content (#PCDATA) > ]> <poem> <author>王維</author> <title>鹿踩</title> <content>空山不見人,但聞人語聲。返景入深林,復照青苔上。</content> </poem> 將DTD嵌入XML文件中用于驗證描述詩集的XML,稱為內部DTD文檔。4.使用外部DTD驗證XML
存儲DTD的文件一般以.dtd作為文件的擴展名。 語法: <!DOCTYPE 根元素 SYSTEM "DTD文件路徑"> DOCTYPE、SYSTEM是關鍵字。 示例:<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE poems SYSTEM "poems.dtd"> <poems createYear="2011"> <poem> <title>春曉</title> <author>孟浩然</author> <year>732</year> <content>春眠不覺曉.....</content> </poem> </poems>5.DTD元素
1.DTD元素定義語法:<!ELEMENT NAME CONTENT> ELEMENT是關鍵字 NAME是元素名稱 CONTENT是元素類型 常用的元素類型如下: #PCDATA,可以包含任何字符數據,但是不能在其中包含任何子元素,例如:<!ELEMENT title (#PCDATA)> 純元素類型,只包含子元素,并且這些子元素外沒有文本,例如:<!ELEMENT poems (poem*) > 2.DTD元素中某些符號的用途 符號 用途 示例 示例說明 () 用來給元素分組 (古龍|金庸|梁羽生),(王朔|余杰),毛毛 表示分為三組 | 在列出的對象中選擇一個 (男人|女人) 表示"男人"或者"女人"必須出現,并且兩者至少選一 , 對象必須按指定的順序出現 (西瓜,蘋果,香蕉) 表示"西瓜""蘋果""香蕉"必須出現,并且按這個順序出現 * 該對象允許出現0到多次 (愛好*) 表示"愛好"可以出現0次到多次 ? 該對象可以出現0次到1次 (菜鳥?) 表示"菜鳥"可以出現0次到1次 + 該對象最少出現1次到多次 (成員+) 表示"成員"必須出現,而且可以出現多次6.DTD屬性
1.DTD屬性聲明語法如下: <!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性默認值> 2.DTD元素中屬性類型的描述如下: 屬性類型 說明 CDATA 表示字符數據 ID 表示唯一ID IDREF 表示為另一個元素的id IDREFS 表示其他id的列表 ENTITY 表示一個實體 ENTITLES 表示一個實體列表 3.DTD元素中屬性值的描述 值 說明 #REQUIRED 屬性值是必須的 #IMPLIED 屬性值不是必須的 #FIXED 屬性值是固定的4.XML文檔解析
1.DOM4J概述
DOM4J是一個易用的,開源的庫,可以實現對XML文檔的解析。2.使用DOM4J操作XML數據
1.Document對象相關SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.節點相關 1.獲取文檔的根元素Element rootElm = document.getRootElement(); 2.取得某節點的單個子節點Element memberElm = root.element("member"); //"member"是節點名 3.取得節點的文字String text = memberElm.getText(); 4.取得某節點下名為"member"的所有子節點并遍歷List nodes = rootElm.elements("member"); for(Iterator it = nodes.iterator();it.hasNext();){ Element elm = (Element)it.next(); } 5.對某節點下的所有子節點進行遍歷for(Iterator it = root.elementIterator;it.hasNext();){ Element element = (Element)it.next(); } 6.在某節點下添加子節點Element ageElm = newMemberElm.addElement("age"); 7.設置節點文字ageElm.setText("29"); 8.刪除某節點parentElm.remove(childElm); //childElm是待刪除的節點,parentElm是其父節點。 9.添加一個CDATA節點Element contentElm = infoElm,addElement("content"); contentElm.addCDATA(diary.getContent()); contentElm.getText(); //特別說明:獲取街道的CDATA值與獲取節點的值是用一個方法 contentElm.clearContent();//清除節點中的內容,CDATA亦可3.屬性相關
1.取得某節點下的某屬性Element root = document.getRootElement(); Attribute attribute = root.attribute("size"); //屬性名name 2.獲取屬性的文字String text = attribute.getText(); 3.遍歷某節點的所有屬性Element root = document.getRootElement(); for(Iterator it = root.attributeIterator();it.hasNext()){ Attribute attribute = (Attribute)it.next(); String text = attribute.getText(); System.out.PRintln(text); } 4.設置某節點的屬性和文字newMemberElm.addAttribute("name","sitinspring"); 5.設置屬性的文字Attribute attribute = root.attribute("name"); attribute.setText("sitinspring");
新聞熱點
疑難解答