在 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
ELEMENT: firstname
TEXT:
+ 。因此,對於 MIXED 內容模型來說,文字組合、空白字元和元素都是相關的。對於非 MIXED 內容模型來說則不是這樣。
要使只有空白字元的TEXT 節點消失,請從「person」元素聲明中刪除#PCDATA 關鍵字:
結果是下面清晰的樹:
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
這最好不輸出為:
E
lephant
E
lephant
名稱空間類型必須為 #FIXED。屬性的名稱空間也是這樣:
名稱空間和 XML 架構
DTD 和 XML 架構不能混合。例如,下面的
xmlns:x CDATA #FIXED "x-schema:myschema.xml"
將不會導致使用在 myschema.xml 中定義的架構定義。對 DTD 和 XML 架構的使用是互斥的。 如何在 Visual Basic 中使用 XMLDSO?
使用下面的 XML 作為範例:
Mark Hanson
Jane0114185 5
用下面的程式碼將 XML 資料載入到 XML DSO 控制項:
Dim dso As New XMLDSOControl
Dim doc As IXMLDOMDocument
Set doc = dso.XMLDocument
幫助D. ter 的新記錄集物件中:
Set da.Object = dso
Dim rs As New ADODB.Recordset
rs. MsgBox rs.Fields("name"). Value
結果顯示字串「Mark Hanson」
必須已經安裝 MSXML.DLL 的 IE5 版本。在 Visual J++ 6.0 中,從專案選單中選擇新增 COM 包裝程序,然後從 COM 物件清單中選擇「Microsoft XML 1.0」。該操作將把所需的 Java 包裝程式建構到稱為「msxml」的新軟體包中。這些預先建構的 Java 包裝程式也可以下載。類別可以依下列方法使用:
import com.ms.com.*;
public class Class1 總 〕〜》》 >
DOMDocument doc = new DOMDocument ();
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*〠
tagXMLEMEM_TYPE*
_xml_error*
這使大小減少為147KB。同時也可以刪除下面的項目:
在 Java 應用程式中從多個執行緒存取 XML 文件。
xmlhttpRequest 用 XML DAV HTTP 擴充與伺服器通訊。
IXTLRuntime
定義 XSL 樣式表腳本物件。
XMLDSOControl
綁定到 HTML 頁面中的 XML 資料。
XMLDOMDocumentEvents
在分析過程中返回回呼。
DOMDocument, IXMLDOMDocument
IXMLDOMor* 送IX。〠!*@*** IXMLDOMDocumentFragment*
IXMLDOMImplementation
IXMLDOMParseError
和使用者可能需要保留的DTD 資訊:
IXMLDOMDocumentType
IXMLDOMEntity
IXMLDOMAttribute
IXMLDOMCDS.
IXMLDOMElement
IXMLDOMProcessingInstruction
IXMLDOMEntityReference
IXMLDOMText捲髮使大小減少到61KB。但是,對 IXMLDOMElement 來說,getAttribute 和 setAttribute 方法都是有用的。否則需要使用:
以上就是XML入門的常見問題(四)的內容,更多相關內容請關注PHP中文網(www.php.cn) !