【正文】
()。 Node child = (Node)()。 (/title/headbody\n)。 if ( ().equals() ) (WS+br/)。 i++) { int type = (i).getNodeType()。 Worker w = new Worker(h)。charset=Big5 % html head titleGreetings/title /head body % String s = new String((data).getBytes(ISO88591), Big5)。 StringBuffer strBuffer = new StringBuffer()。 // 建立 Transformer物件 // 若不指定任何 xsltFile,則不做任何轉換,而直接輸出 Transformer tf = ()。 } Ch10Print import .*。 } // 呼叫方法建立轉換輸出的 HTML文件 ((), htmlFile, xsltFile)。 } Ch10_6_2 // 主程式 public static void main(String[] args) throws Exception { String htmlFile = 。 ? 接著使用 transform() 方法將 XML 文件使用 XSLT 文件執(zhí)行轉換,如下所示: (new StreamSource(new StringReader(xmlData)), new StreamResult(new FileOutputStream(htmlFile)))。 // 或者 // Object result = (“//book/title/text()”, // doc, )。 public class TestXPath { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { // 跟以前載入文件進行剖析相同 DocumentBuilderFactory domFactory = ()。 // 利用 XPathFactory 產生 XPath 處理器 XPath xpath = ()。 public class SimpleErrorHandler implements ErrorHandler { public void error(SAXParseException exception) { (error: + ())。 // 明確告知 JAXP 所使用的 Schema 語言 ( // Specify our own schema this overrides the schemaLocation in the xml file //( file:./)。 (1)。 } } 練習題 ? 請修改 Ch10_4_1 並使其能夠產生 的 XML 文件。 (/+(i).getFirstChild().getNodeValue())。 ( + +())。 // 取得所有的子節(jié)點 for ( int i=0。 printXML(root)。 ((PHP 5網頁設計範例教本 ))。 // 建立新 XML文件 document = ()。 (element, (), “books”)。 ? 如果想刪除屬性,則是使用 Element 元素物件的removeAttribute() 方法來刪除屬性,如下所示: // 取得一個 Element 節(jié)點 del (instock)。 ? 例如:將 root 節(jié)點新增成為 XML DOM 的根節(jié)點,如下所示: (root)。 ? 我們先以建立新的 DOM 為例 ?建立新的 XML DOM 的語法如下: DocumentBuilder db = ()。 NamedNodeMap 集合物件 ? NamedNodeMap 集合物件是元素的屬性集合(類似 Map 的結構)。 i ()。 } } Node節(jié)點種類 ge tN o d e Typ e () N o d e 種類 ge tN o d e N am e () ge tN o d e V al u e () ge tA ttr i b u te s () 2 A t t r 屬性 屬性名稱 屬性值 n u l l 4 CD A T A S e c t i o n c da t a s e c t i o n CD A T A 值 n u l l 8 Co m m e n t 註解 c o m m e n t 註解文字內容 n u l l 9 D o c um e n t 文件 do c um e n t n u l l n u l l 11 D o c um e n t F ra g m e nt do c um e n t f ra g m e nt n u l l n u l l 10 !D O CT Y P E n u l l n u l l n u l l 1 E l e m e n t 標籤名稱 n u l l N a m e dN o de M a p 3 T e xt t e xt 文字內容 n u l l 5 E n t i t y R e fe r e n c e 實體參考名稱 n u l l n u l l 6 E n t i t y 實體名稱 n u l l n u l l 7 PI t a r ge t 不包含 t a r ge t 的內容 n u l l 12 N o t a t i o n N o t a t i o n 名稱 n u l l n u l l Document文件物件 ? XML 文件建立的樹狀結構是 Document 物件(可以想成之前說過的 root node) ? 當 DOM 載入 XML 文件建立 Document 物件後,就可以使用 getDocumentElement() 方法取得 XML 文件的根元素,如下所示: ? Node root = ()。 i++) { int type = (i).getNodeType()。 case 6: return 實體名稱: + ()。 pChild(child, 0)。 // 讀入 XML文件 document = (new File(filename))。 import .*。 // 剖析 XML文件 (new File(filename))。 import .*。 } catch(IOException ie) { ()。 ?程式碼匯入 XML 剖析器和 DOM 的相關套件,至於 .* 套件是剖析錯誤處理的相關套件。 ? XML 的 parser 有非常多種,比較著名的有 Apache 的 Xerces、 Crimson 等;只可惜這些 parser 所提供的 APIs 並不相通(這跟當初設計 DOM APIs 時的想法不同)。 ?事件基礎的剖析器( Eventbased Parser): ? 讀取內容時觸發(fā)一系列事件,應用程式提供函數處理這些事件,以便存取 XML內容,例如: SAX( Simple API for XML)。 ? 在 套件主要包含兩個代理商類別( Factory Classes),如下所示: ? DocumentBuilderFactory 類別: ? 自動選取某一 parser 類別( ex. Xerces),來產生 DocumentBuilderFactory 的物件 ? 利用現有的 configuration 來產生 DocumentBuilder 實例。 DocumentBuilderFactory dbf = ()。 (false)。 try { (true)。 } catch(IOException ie) { (檔案處理錯誤 !)。 public class Ch10_3_1 { static Document document。 Node child = (Node)()。// 剖析器設定錯誤 } catch(IOException ie) { ()。 case 10: return DOCTYPE: + ((DocumentType) n).getSystemId()。 if(type == ) { pChild((i), pos+1)。 ? Note: Document 是 Node 的子類別 Node 節(jié)點物件 ? Node 節(jié)點物件許多方法: ?程式碼使用 getNodeName() 方法取得節(jié)點的節(jié)點名稱 ?若一個節(jié)點 root 擁有多個子節(jié)點,我們可以取得該節(jié)點下的所有子節(jié)點: ? NodeList nodes = ()。 ?程式碼在取得根節(jié)點 root 物件後,使用getChildNodes() 方法取得下一層第 2 個節(jié)點的第 3個子節(jié)點,對應 XML 元素就是第 2 個 book 元素的第 3個子元素 price。 j ()。 ? 如果觀念清楚的話,以下的說明也可以用來為某一已經存在的 XML 文件新增節(jié)點。 (t)。 ? 修改屬性 instock 內容: Element element = ().getFirstChild()。 import .*。 // 新增子元素 code Element node = (code)。 Node newText = (陳會安 )。 (instock)。 (/+(i).getFirstChild().getNodeValue())。 (根元素 : +())。 j ()。 ?JDK supports JAXP API ?JDK supports JAXP API ?JDK supports JAXP API TestXSD // 驗證 XML Schema import .*。 } catch (Exception e) { ( ().getName() +: + () )。 // parse 錯誤會引起 SAXException Document document = (xmlFile)。 } } XPath API ? JDK 版之後,提供了一個非常好用的 XPath API,其 package 為 . ?步驟一:把 XML 檔案依照之前的方式載入 DocumentBuilderFactory domFactory