首頁  >  文章  >  後端開發  >  XML入門的常見問題(四)

XML入門的常見問題(四)

黄舟
黄舟原創
2016-12-22 17:39:441792瀏覽

  在 xml 物件模型中如何處理空白字元?

  有些時候,XML 物件模型會顯示包含空白字元的 TEXT 節點。空白字符被截斷後,多半會帶來一些混亂。例如下面的XML 範例:


   ]>
  Smith
  John
 

  +.

  ELEMENT: person

  TEXT: 
  ELEMENT: lastname
  TEXT: 
  ELEMENT: firstname
  TEXT: 


  名字和姓氏兩邊是只包含空白字元的TEXT 節點,因為「person」元素的內容模型是MIXED;它包含#PCDATA 關鍵字。 MIXED 內容模型指定元素之間可以有文字存在。因此,以下的內容也是正確的:

   My last name is Smith and my first name is
  John


  〜〜〜『 last name is
  ELEMENT : lastname

  TEXT: and my first name is

  ELEMENT: firstname
  TEXT: 


  + 。因此,對於 MIXED 內容模型來說,文字組合、空白字元和元素都是相關的。對於非 MIXED 內容模型來說則不是這樣。

  要使只有空白字元的TEXT 節點消失,請從「person」元素聲明中刪除#PCDATA 關鍵字:

  結果是下面清晰的樹:

〠   㟜〜〜〜〜) person

  ELEMENT: lastname
  ELEMENT: firstname

  XML 聲明要做什麼?

  XML 聲明必須列在 XML 文件的頂部:

  它指定下面的項目:

  該文件是 XML 文件。在遺失或尚未指定 MIME 類型時 MIME 偵測器可以用它來偵測檔案是否為類型 text/xml。 
  文件符合 XML 1.0 規格。在以後 XML 有其他版本時這一點很重要。 
  文件字元編碼。編碼屬性是可選的,預設為 UTF-8。 
  注意:XML 宣告必須在​​ XML 文件的第一行,因此下面的 XML 檔案:

  產生下面的分析錯誤:

  無效的 xml 宣告。

  行 0000002:     

  位置  0000007: ------^

  注意:XML 聲明是可選的。如果需要在頂部指定註解或處理指令,那麼請不要放入 XML 聲明。但是,預設的編碼將為 UTF-8。


  如何以可讀格式列印我的 XML 文件?

  在用 DOM 從零開始構造文檔以產生 XML 文件時,任何內容都在一行上,相互之間沒有空格。這是預設的行為。

  建構在 Internet Explorer 5 中的預設 XSL 樣式表,以可讀格式顯示和列印 XML 文件。例如,如果已經安裝了 IE5,請嘗試查看 nospace.xml 檔案。瀏覽器中應該顯示下面的樹:

  - 
  - 
  XYZ 
  12.56

  在 XML 中沒有插入空白字元。

  列印可讀 XML 是非常有趣的,特別是有定義不同類型內容模型的 DTD 時。例如,在混合內容模型 (#PCDATA) 下不能插入空格,因為它可能會改變內容的意義。例如請考慮下面的 XML:

  Elephant

  這最好不輸出為:

  E
  lephant
   E
  lephant

  因為單字邊界不再正確。

  所有這些都使自動化列印成為問題。如果不需要列印可讀 XML,那麼可以使用 DOM 在適當的位置插入空白字元作為文字節點。

  如何在 DTD 中使用名稱空間? 要在 DTD 中使用名稱空間,請在使用它的元素的 ATTLIST 聲明中聲明它,如下所示:


  名稱空間類型必須為 #FIXED。屬性的名稱空間也是這樣:

  名稱空間和 XML 架構 
  DTD 和 XML 架構不能混合。例如,下面的

   xmlns:x CDATA #FIXED "x-schema:myschema.xml"

  將不會導致使用在 myschema.xml 中定義的架構定義。對 DTD 和 XML 架構的使用是互斥的。

  如何在 Visual Basic 中使用 XMLDSO?


  使用下面的 XML 作為範例:


   Mark Hanson 

  206 765 4583 

 Jane0114185 5

  可以如下綁定到 ADO 記錄集:

  建立新的 VB 6.0 專案。

  新增對 Microsoft ActiveX Data Objects 2.1 或更高版本、Microsoft Data Adapter Library 和 Microsoft XML 2.0 版的參考。


  用下面的程式碼將 XML 資料載入到 XML DSO 控制項:


   Dim dso As New XMLDSOControl
  Dim doc As IXMLDOMDocument
  Set doc = dso.XMLDocument
 幫助D. ter 的新記錄集物件中:

   Dim da As New DataAdapter

  Set da.Object = dso
  Dim rs As New ADODB.Recordset
   rs.   MsgBox rs.Fields("name"). Value

  結果顯示字串「Mark Hanson」 

  如何在 java 中使用XML DOM?


  必須已經安裝 MSXML.DLL 的 IE5 版本。在 Visual J++ 6.0 中,從專案選單中選擇新增 COM 包裝程序,然後從 COM 物件清單中選擇「Microsoft XML 1.0」。該操作將把所需的 Java 包裝程式建構到稱為「msxml」的新軟體包中。這些預先建構的 Java 包裝程式也可以下載。類別可以依下列方法使用:


   import com.ms.com.*;

  import msxml.*;

  public class Class1 總 〕〜》》 >
  DOMDocument doc = new DOMDocument ();

  doc.load(new Variant("file://d:/samples/ot.xml"));

  System.out.println("Loaded " + doc.getDocumentElement().getNodeName());

  }

  }

 

  程式碼範例將從sun religion 範例載入3.8MB 測試檔案「ot.xml」。 Variant 類別用於包裝 Win32 VARIANT 基本類型。

  因為在每次檢索節點時實際上都獲得了新的包裝程序,因此不能在節點上使用指標比較。因此,不要使用下面的程式碼,


   IXMLDOMNode root1 = doc.getDocumentElement();
  IXMLDOMNode root2 = doc.getDocumentElement();而要使用下面的代碼:

   if (ComLib.isEqualUnknown(root1, root2)) ....

 

  .class 包裝程式的總大小約為160KB。但是,為了與 W3C 規範完全符合,應該只使用 IXMLDOM* 包裝程式。下面的類別是舊的IE 4.0 XML 接口,可以從msxml 資料夾中刪除它們:


   IXMLAttribute*, 
  IXMLDocument*, XMLDocument*,ſ
  IXMLDocument*, XMLDocument*〠

『IX IXMLElementCollection*, 

  tagXMLEMEM_TYPE*​​ 

  _xml_error*

 


  這使大小減少為147KB。同時也可以刪除下面的項目:

   DOMFreeThreadedDocument

  在 Java 應用程式中從多個執行緒存取 XML 文件。 

  xmlhttpRequest

  用 XML DAV HTTP 擴充與伺服器通訊。 
  IXTLRuntime
  定義 XSL 樣式表腳本物件。 
  XMLDSOControl
  綁定到 HTML 頁面中的 XML 資料。 
  XMLDOMDocumentEvents
  在分析過程中返回回呼。 

 

  這可以將大小減少到 116KB。要讓它更小,請考慮DOM 本身有兩層的事實:核心層包括:

   DOMDocument, IXMLDOMDocument 
  IXMLDOMor* 送IX。〠!*＀@*＀*＀*＀ IXMLDOMDocumentFragment* 
  IXMLDOMImplementation 
  IXMLDOMParseError 


  和使用者可能需要保留的DTD 資訊:


   IXMLDOMDocumentType 
  IXMLDOMEntity 

  IXMLDOMNotation 

碼。因此,如果修改DOMDocument 包裝程式並將這些特定類型變更為使用IXMLDOMNode,那麼所有下面的介面都可以刪除:

   IXMLDOMAttribute 
  IXMLDOMCDS. 
  IXMLDOMElement 
  IXMLDOMProcessingInstruction 
  IXMLDOMEntityReference 
  IXMLDOMText捲髮使大小減少到61KB。但是,對 IXMLDOMElement 來說,getAttribute 和 setAttribute 方法都是有用的。否則需要使用:

   IXMLDOMNode.getAttributes().setNamedItem(...)


 以上就是XML入門的常見問題(四)的內容,更多相關內容請關注PHP中文網(www.php.cn) !




陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn