1. 概念
xml ファイルは主に情報を記述するために使用されるため、xml 文書を取得した後、xml 内の要素に従って対応する情報を抽出することが XML 解析です。 Xmlの解析にはDOM解析とSAX解析の2通りの方法があり、それぞれの操作方法は図に示すとおりです。
2. DOM 解析
DOM 解析に基づく XML パーサーは、A ツリーを使用してオブジェクト モデルのコレクションに変換します。情報を保存するデータ構造です。 DOM インターフェイスを介して、アプリケーションはいつでも XML ドキュメント内のデータの任意の部分にアクセスできるため、DOM インターフェイスを使用してアクセスするこの方法はランダム アクセスとも呼ばれます。
DOM アナライザーは XML ファイル全体をツリーに変換してメモリに保存するため、この方法にも欠陥があります。ファイル構造が大きい場合やデータが複雑な場合、この方法のメモリ要件は高くなります。また、複雑な構造を持つツリーを走査することも非常に時間のかかる操作です。ただし、DOM で使用されるツリー構造は XML の情報格納方法と一致しており、そのランダム アクセスも使用できるため、DOM インターフェイスは依然として広く使用される価値があります。
ここでは、xml をツリーに変換するデータ構造を示す例を示します。
<?xml version="1.0" encoding="GBK"?> <address> <linkman> <name>Van_DarkHolme</name> <email>van_darkholme@163.com</email> </linkman> <linkman> <name>Bili</name> <email>Bili@163.com</email> </linkman> </address>
xml をツリーに変換する構造は次のとおりです。
DOM 解析には次の 4 つの主要な操作インターフェイスがあります
ドキュメント: このインターフェイスは XML ドキュメント全体を表し、ツリーへの入り口である DOM 全体のルートとして表されます。このインターフェイスを通じて、XML 内のすべての要素のコンテンツにアクセスできます。一般的な方法は次のとおりです。
(注: 上図には示されていませんが、name と email の属性もそれぞれ 1 つのノードです)
Document の共通メソッド
#Node: このインターフェイスは DOM ツリー全体で重要な役割を果たします。DOM 操作のコア インターフェイスは Node (Document、Element、Attr) から継承されます。 DOM ツリーでは、各 Node インターフェイスは DOM ツリー ノードを表します。
Node インターフェイスの共通メソッド
NodeList: このインターフェイスはポイントのコレクションを表します。順序付けられた関係にある一連のノードに使用されます。
NodeList の共通メソッド
##NamedNodeMap: このインターフェイスは、ノードのグループとその一意の名前との間の 1 対 1 の関係を表し、主に次の目的で使用されます。ノード属性を表す上記の 4 つのコア インターフェイスに加えて、プログラムで DOM 解析操作を実行する必要がある場合は、次の手順に従う必要があります: 1. DocumentBuilderFactor を確立して、 DocumentBuilder オブジェクト: DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();2. DocumentBuidler の作成: DocumentBuilder builder = Factory.newDocumentBuilder(); 3. Document オブジェクトを作成し、ツリーの Entry を取得します: Document doc = builder.parse("xml ファイルの相対パスまたは絶対パス");4. NodeList を作成します:NodeList n1 = doc .getElementByTagName("Read Node");5. XML 情報の取得public class DOMDemo01 { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException{ //建立DocumentBuilderFactor,用于获得DocumentBuilder对象: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.建立DocumentBuidler: DocumentBuilder builder = factory.newDocumentBuilder(); //3.建立Document对象,获取树的入口: Document doc = builder.parse("src//dom_demo_02.xml"); //4.建立NodeList: NodeList node = doc.getElementsByTagName("linkman"); //5.进行xml信息获取 for(int i=0;i<node.getLength();i++){ Element e = (Element)node.item(i); System.out.println("姓名:"+ e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); System.out.println("邮箱:"+ e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue()); } } }上記のコードは次のようになります。 4 番目のポイントから分析します:doc.getElementByTagName("linkman") を通じて NodeList を取得します。上記の XML ファイルには 2 つの linkman ノードが含まれているため、ここでの NodeList には 2 つのノード (両方とも linkman ノード) が含まれます。ループメソッドを通じて XML ファイル内の情報を取得します。 Element e = (Element)node.item(i) はリンクマン ノードを取得します。つまり、e はリンクマンを指しますe.getElementTagName("name").item(0) .getFirstChild ().getNodeValue();getElementTagName("name"); リンクマンの下にあるすべての名前ノードを取得しました (実際には 1 つだけ); Item(0); 最初の名前を取得しますノード (1 つだけ);
getFristChild(); コンテンツ バンが配置されているノードである名前ノードの下のテキスト ノードを取得します (前述したように、テキスト コンテンツも別のノードであり、Document メソッド リストの createTextNode() はテキスト ノードを作成します);
getNodeValue() はテキスト ノードの値を取得します: van_darkholme;
その他の関連する質問については、PHP 中国語 Web サイトを参照してください: XML ビデオ チュートリアル
以上がXML 解析における DOM 解析の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。