XMLオブジェクトモデルで空白文字をどう扱うか?
XML オブジェクト モデルでは、空白文字を含む TEXT ノードが表示される場合があります。空白文字が切り捨てられると、混乱が生じる可能性があります。例えば以下のXML例: ELEMENT: lastname
TEXT: ELEMENT : firstname
TEXT:
「person」要素のコンテンツモデルは、名と姓が空白文字のみを含むTEXTノードで囲まれています。 MIXED; #PCDATA キーワードが含まれています。 MIXED コンテンツ モデルは、要素間にテキストが存在できることを指定します。したがって、以下も正しいです:
結果は、次のようなツリーになります: ELEMENT: person
TEXT: My last name is
ELEMENT : lastname
TEXT: and my first name is
ELEMENT: firstname
TEXT:
単語「is」の前後の空白文字と、単語「and」の前後の空白文字がなければ、文章は理解できません。 。したがって、MIXED コンテンツ モデルの場合、テキストの組み合わせ、空白文字、および要素はすべて関連します。これは、非 MIXED コンテンツ モデルには当てはまりません。
結果は次のような明確なツリーになります:
処理命令: xml
DocType: person
ELEMENT: lastname
ELEMENT: firstname
XML宣言は何をするのでしょうか?
XML宣言はXML文書の先頭に記載する必要があります:
文書はXML文書です。 MIME 検出器は、これを使用して、MIME タイプが欠落しているか指定されていない場合に、ファイルのタイプが text/xml であるかどうかを検出できます。
文書の文字エンコーディング。エンコーディング属性はオプションであり、デフォルトは UTF-8 です。
注: XML 宣言は XML ドキュメントの最初の行にある必要があるため、次の XML ファイル: は次の解析エラーを生成します:
無効な xml 宣言。
行 0000002:
場所 0000007: ------^
注: XML 宣言はオプションです。コメントや処理命令を先頭に指定する必要がある場合は、XML 宣言を置かないでください。ただし、デフォルトのエンコードは UTF-8 になります。
-
読み取り可能な XML を印刷することは、特にさまざまな種類のコンテンツ モデルを定義する DTD がある場合に非常に興味深いものです。たとえば、混合コンテンツ モデル (#PCDATA) では、コンテンツの意味が変わる可能性があるため、スペースを挿入できません。たとえば、次の XML を考えてみましょう:
Elephant
これは、単語の境界が正しくなくなるため、次のように出力しない方がよいでしょう:
E
elephant
。
これらすべてが自動印刷に問題をもたらします。読み取り可能な 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 Jane Smith 425 808 1111 次のように ADO レコードセットにバインドできます:
Microsoft ActiveX データ オブジェクト 2.1 以降、Microsoft データ アダプター ライブラリ、および Microsoft XML バージョン 2.0 への参照を追加します。
Dim dso As New XMLDSOControl
Dim doc As IXMLDOMDocument
Set doc = dso. :
Dim da As New DataAdapter
Set da.Object = dso Dim rs As New ADODB.Recordset
Set rs.DataSource = da
データへのアクセス:
MsgBox rs.Fields("name"). Value
結果には文字列「Mark Hanson」が表示されます
JavaでXML DOMを使うには?
IE5版のMSXML.DLLがインストールされている必要があります。 Visual J++ 6.0 では、[プロジェクト] メニューから [COM ラッパーの追加] を選択し、COM オブジェクト リストから [Microsoft XML 1.0] を選択します。これにより、必要な Java ラッパーが「msxml」という新しいパッケージに構築されます。これらの事前に構築された Java ラッパーもダウンロードできます。クラスは次のように使用できます:
import com.ms.com.*;
import msxml.*; public class Class1
{
public static void main (String[] args)
{
DOMDocument doc = new DOMDocument ();
doc.load(new Variant("file://d:/samples/ot.xml"));
System.out.println("Loaded " + doc.getDocumentElement().getNodeName());
}
}
IXMLDOMNode root1 = doc.getDocumentElement(); IXMLDOMNode root2 = doc.getDocumentElement(); if (root1 == root2)...
コード:
if ( ComLib.isEqualUnknown(root1, root2)) ....
.class ラッパーの合計サイズは約 160KB です。ただし、W3C 仕様に完全に準拠するには、IXMLDOM* ラッパーのみを使用する必要があります。次のクラスは古い IE 4.0 XML インターフェイスであり、msxml フォルダーから削除できます:
_xml_error*
これにより、サイズが 147 KB に削減されます。次の項目も削除できます:
DOMFreeThreadedDocument
Java アプリケーションの複数のスレッドから XML ドキュメントにアクセスします。
xmlhttpRequest
XML DAV HTTP 拡張機能を使用してサーバーと通信します。
XSLスタイルシートスクリプトオブジェクトを定義します。
XMLDSOControlHTML ページ内の XML データにバインドします。
XMLDOMDocumentEvents 分析プロセス中にコールバックを返します。
これにより、サイズが 116KB に削減されます。小さくするために、DOM 自体には 2 つの層があるという事実を考慮してください。コア層は、
DOMDocument, IXMLDOMDocument
IXMLDOMNode*
IXMLDOMNodeList*
IXMLDOMNamedNodeMap*
IXMLDO MImplementation
IXMLDOMParseError そしてユーザーDTD 情報を保持する必要がある場合があります:
IXMLDOMDocumentType
IXMLDOMEntity
IXMLDOMNotation
IXMLDOMentityReference
IXMLDOMText
これらを削除すると、サイズが小さくなります。 61KB。ただし、IXMLDOMElement の場合は、getAttribute メソッドと setAttribute メソッドの両方が便利です。それ以外の場合は、次を使用する必要があります:
上記は、XML を始めるための FAQ (4) の内容です。さらに関連する内容については、注意してください。 PHP 中国語 Web サイト (www.php.cn) !