XMLの制約およびXML / HTMLの構文解析

XML:


コンセプト:拡張マークアップ言語拡張マークアップ言語

  • スケーラブル:タグはカスタマイズ可能です。
  • 機能
    • データストレージ
      1. プロファイル
      2. ネットワークで送信
  • XMLおよびHTMLの違い
    1. XMLタグは、HTMLタグが事前に定義され、カスタマイズ可能です。
    2. XMLの厳密な構文、HTML構文緩いです
    3. XMLはデータを格納し、HTML表示されているデータ
  • W3C:ワールド・ワイド・ウェブ・コンソーシアム

構文:


  • 基本的な構文:
    1. 拡張子.xmlのXMLドキュメント
    2. 最初の行は、XML文書宣言として定義する必要があります
    3. XML文書と唯一のルートタグ
    4. 原因に引用符で属性値(奇数と偶数の缶)
    5. タグを適切に閉じなければなりません
    6. XMLのタグ名は、大文字と小文字が区別されます
  • はじめに:

    
    <?xml version='1.0' ?>
    <users>
        <user id='1'>
            <name>zhangsan</name>
            <age>23</age>
            <gender>male</gender>
            <br/>
        </user>
    
        <user id='2'>
            <name>lisi</name>
            <age>24</age>
            <gender>female</gender>
        </user>
    </users>
    
  • コンポーネント:

    1. 文書宣言
      1. フォーマット:
      
      <?xml 属性列表 ?>
      
      1. 属性のリスト:
        • バージョン:バージョン番号、必要な属性
        • エンコード:エンコードします。現在の文書の文字セットでは、デフォルト値を使用する解析エンジンに通知:ISO-8859-1
        • スタンドアロン:独立
          • 値:
            • はい:他のファイルに依存しません
            • いいえ:他のファイルに依存
    2. コマンド(こちら):CSSは、インプレッションデータの結合

      
      <?xml-stylesheet type="text/css" href="a.css" ?>
    3. レーベル:カスタムラベル名
      • ルール:
        • 名前は文字、数字、その他の文字を含めることができます
        • 名前は数字または句読点で始めることはできません
        • 名前は、文字のXML(またはXMLやXMLなど)で始めることはできません。
        • 名前にはスペースを含めることはできません
    4. プロパティ:
      上記のid属性の値が一意です
    5. テキスト:
      • CDATA領域:この領域のデータは、表示のようになり、そのような「<」&LT必要性などの特殊文字をすることはできません
        • フォーマット:
        
         <![CDATA[ 数据内容 ]]>
        

制約


  • 制約:書き込み、XMLドキュメントの規則の規定

    • フレーム(プログラマ)のユーザとして:
      1. 制約は、XML文書内に導入することができます
      2. 制約は、単に文書を読むことができます
    • カテゴリー:
      1. DTD:不完全な属性を定義する簡単な制限技術、不良品、

      2. スキーマ:複雑な技術的な制約
    • DTD:
      • XML文書にDTD文書を導入
        • 内部には、DTD:XMLドキュメントで定義された制約ルールを
        • 外部DTD:ルールは、外部DTDファイルに制約を定義します
          • ローカル:
          
          <!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
          
          • ネットワーク:
          
          <!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
          
          
          dtd文件内容
          <!ELEMENT students (student*) >
          <!ELEMENT student (name,age,sex)>
          <!ELEMENT name (#PCDATA)>
          <!ELEMENT age (#PCDATA)>
          <!ELEMENT sex (#PCDATA)>
          <!ATTLIST student number ID #REQUIRED>
          
          XML引入内部dtd
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE students SYSTEM "student.dtd">
          
          <students>
              <student number="0001">
                  <name>tom</name>
                  <age>18</age>
                  <sex>male</sex>
              </student>
          
          </students>
          
    • スキーマ:
      • はじめに:
        1.塗りつぶしたXML文書のルート要素
        2.はじめにxsiプレフィックスのxmlns:。XSI = "http://www.w3.org/2001/XMLSchema-instance"
        3. XSDファイルを導入し、名前空間のxsi:。SCHEMALOCATION = " XXX / student.xsd "
        4. XSD各制約を指定A接頭識別のxmlnsとして、(複数の文書を区別するために使用XSD)=" XXX / XML "(のxmlns =" XXX / XML「)

        
        <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="xxx/xml"
        xsi:schemaLocation="xxx/tudent.xsd">
        

分析:XML文書の操作、文書の読み取りデータをメモリに


  • オペレーティングXMLドキュメント
    1. (読み込み)の解析:データはメモリに文書を読んで
    2. 書き込み:XML文書にメモリ内のデータを保存します。永続ストレージ
  • パースのxml方法:
    1. DOM:メモリにロードされたワンタイムマークアップ言語文書、メモリ内のDOMツリーの形成
      • 長所:動作するように簡単には、すべての文書のためのCRUD操作することができ
      • 短所:総メモリ
    2. SAXは:イベント駆動型に基づいて、行ずつ読み込みます。
      • 長所:メモリを取ることはありません。
      • 短所:のみ読み取ることができ、ない追加および削除
  • 一般的なXMLパーサ:
    1. JAXP:パーサによって提供日、およびサポート2つのアイデアDOMサックス
    2. DOM4J:非常に良いパーサ
    3. Jsoup:jsoupは、Java HTMLパーサは、直接HTMLテキストをURLアドレスを解析することができます。これは、DOM、CSSや操作方法を介してデータを取り出して操作している非常に省力化APIは、jQueryのに似ています。
    4. PULL:Androidオペレーティングシステム、組み込みパーサ、サックスの方法。
  • Jsoup:jsoupは、Java HTMLパーサは、直接HTMLテキストをURLアドレスを解析することができます。これは、DOM、CSSおよび操作方法jQueryのに似ていて、データを取り出して操作している非常に省力化APIのセットを提供します。
    • はじめに:
      • ステップ:
        1. インポートのjarパッケージ
        2. Documentオブジェクトを取得します。
        3. 対応するタグElementオブジェクトを取得します
        4. データを取得します
    • コード:
    
         //2.1获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //2.2解析xml文档,加载文档进内存,获取dom树--->Document
        Document document = Jsoup.parse(new File(path), "utf-8");
        //3.获取元素对象 Element
        Elements elements = document.getElementsByTag("name");
    
        System.out.println(elements.size());
        //3.1获取第一个name的Element对象,elements继承ArrayList
        Element element = elements.get(0);
        //3.2获取数据
        String name = element.text();
        System.out.println(name);
    
  • 使用のオブジェクト:
    1. Jsoup:ツール、HTMLやXML文書は、リターンドキュメントを解決することができます
      • 解析:解析HTMLやXML文書、リターンドキュメント
        • パース(文字列たcharsetName、中​​のファイル):解析XMLまたはHTMLファイル。
        • パース(文字列のHTML):解析されたHTMLまたはXML文字列
        • パース(URL URL、INT timeoutMillis):ドキュメントオブジェクトは、ネットワークを介して、HTMLやXMLパスを指定取得します。
    2. ドキュメント:ドキュメントオブジェクト。これは、DOMツリーのメモリを表し、
      • Elementオブジェクトを取得します。
        • getElementByIdを(文字列ID):目的に応じて要素の一意のID属性値を取得します
        • getElementsByTag(文字列tagNameを):ラベル名に基づいてオブジェクトのコレクション要素を取得します。
        • getElementsByAttribute(文字列のキー):属性名に基づいてオブジェクトのコレクション要素(ID)を取得します。
        • getElementsByAttributeValue(文字列キー、文字列値):対応する属性名と属性値に応じてオブジェクトのコレクション要素を取得し
    3. 要素:要素のコレクションElementオブジェクト。これは、ArrayListのように使用することができます 使用するには、
    4. 要素:要素オブジェクト
      1. サブ要素オブジェクトを取得します
        • getElementByIdを(文字列ID):目的に応じて要素の一意のID属性値を取得します
        • getElementsByTag(文字列tagNameを):ラベル名に基づいてオブジェクトのコレクション要素を取得します。
        • getElementsByAttribute(文字列のキー):属性名の要素に基づいてオブジェクトのコレクションを取得します。
        • getElementsByAttributeValue(文字列キー、文字列値):対応する属性名と属性値に応じてオブジェクトのコレクション要素を取得し
      2. プロパティ値を取得します。
        • 文字列attrの(文字列のキー):属性名に基づいてプロパティ値を取得します。
      3. テキストの内容を取得します
        • 文字列のテキスト():テキストコンテンツを取得
        • 文字列のHTML():(単語列タグの内容を含む)ラベル体の全体の内容を取得します。
    5. ノード:ノードオブジェクト
      • ドキュメントおよび要素は、親クラスであります
      
      import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
      import org.jsoup.Jsoup;
      import org.jsoup.nodes.Document;
      import org.jsoup.select.Elements;
      
      import java.io.IOException;
      import java.net.URL;
      
      public class JsoupDemo01 {
          public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
              String path= JsoupDemo01.class.getClassLoader().getResource("").getPath();
      
              URL url= new URL("https://www.baidu.com/");
              Document document = Jsoup.parse(url,10000);
              Elements tag = document.getElementsByTag("map");
              Elements btn = document.getElementsByAttributeValue("type","submit");
              String text = btn.attr("value");
              System.out.println(btn);
              System.out.println("-------------");
              System.out.println(text);
              System.out.println("-------------");
      
           }
      }
      
      
  • 迅速かつ簡単な方法:
    1. セレクタ:セレクタ
      • メソッドを使用:Elementsは選択(文字列cssQuery)
        • 構文:構文クラスは、リファレンスセレクターで定義されています
    2. XPathは:XPathは、XML(標準一般化マークアップ言語のサブセット)の部分の位置を決定するための言語の文書であるXMLパス言語であります
      • XpathのJsoupの使用は、追加の輸入ジャーパッケージが必要です。
      • クエリは、リファレンスマニュアルをw3cshool、クエリのXPath構文は完了です
      • コード:

        
        //1.获取student.xml的path
        String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
        //2.获取Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        
        //3.根据document对象,创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);
        
        //4.结合xpath语法查询
        //4.1查询所有student标签
        List<JXNode> jxNodes = jxDocument.selN("//student");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }
        
        System.out.println("--------------------");
        
        //4.2查询所有student标签下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for (JXNode jxNode : jxNodes2) {
            System.out.println(jxNode);
        }
        
        System.out.println("--------------------");
        
        //4.3查询student标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
        for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
        }
        System.out.println("--------------------");
        //4.4查询student标签下带有id属性的name标签 并且id属性值为pp
        
        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='sex']");
        for (JXNode jxNode : jxNodes4) {
            System.out.println(jxNode);
        }
        

おすすめ

転載: www.cnblogs.com/huxiaobai/p/12129447.html