XMLの基礎誘導(簡単に理解します)

XML:拡張マークアップ言語

なJSONなどの技術のいくつかの人気は一部の機能ではなく、他のXML技術のいくつかあるが、XMLの道路は、より多くの狭いようだが、XMLでデータストレージの大容量の数は、まだいくつかの利点を持っている場合は、XMLを学ぶことは、まだ非常に必要です、あなたは関係なく、既存のフレームワークの多くと同様に、技術が、プロファイルは、XMLに存在している場合でも、少なくともあなたは、その構造の一部を持っており、基本的な使用方法のいくつかを理解しています

(A)の基本的な概要

(1)コンセプト

XML:拡張マークアップ言語:拡張可能なマークアップ言語

マークの種類:動作させるためにタグを使用して、HTMLは、共通のマークアップ言語であります

スケーラブル:あなたはラベルをカスタマイズすることができ、ラベルも、中国の例:に書くことができます。<person></person <张三><张三>

(2)使用

で反射された主データを格納するために使用されるXML、プロファイルとして、または小さなデータベースとして機能データ伝送ネットワーク

:概要:MySQL設定データベース、例えば

以前の私たちはしばしばjdbc.propertiesプロファイルを行うには、ファイルを作成し、それの利点は、あなたがソースコードを変更せずに、データベース内の情報を変更したい場合は、限りすることができますように設定ファイルを変更するだけでなく、XML設定ファイルとして使用することができるということです

url=jdbc:mysql://localhost:3306/db1
user=root
password=root99
driver=com.mysql.jdbc.Driver
<!--例如模拟配置mysql数据库 只为假设,与前面知识对应,实际配置文件后期会很常见-->
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <dbinfo>
        <dbDriver>com.mysql.jdbc.Driver</dbDriver>
        <dbUrl>jdbc:mysql://localhost:3306/db1</dbUrl>
        <username>root</username>
        <password>root99</password>
</config>

B:小さなデータベースとして機能するように

私たちは、それが小さなデータベースとして機能し、XMLにいくつかのデータを格納することができます。

<?xml version="1.0" encoding="UTF-8"?>
<student> 
    <stu> 
        <id>001</id>  
        <name>zhangsan</name>  
        <age>20</age> 
    </stu>  
    <stu> 
        <id>002</id>  
        <name>lisi</name>  
        <age>30</age> 
    </stu>  
</student>

C:データ伝送

ネットワークプログラミングは、我々は簡単なチャットルームを達成する方法を、例えば、多かれ少なかれ連絡し、基本的な原理は、サーバ、複数のクライアントは、データを送信するために、クライアントの後、サーバーがデータを受信するようになっていますデータの一部(不正敏感単語かどうか)、処理形式を見直し、各クライアントにデータを送信します

初めに、我々は一般的に直接コンテンツを配信する文字列を使用することを選択したが、それは遅保守手順に非常に助長されていませんし、使用XMLは後半のメンテナンスプログラムにより優しいことができ

<?xml version="1.0" encoding="UTF-8"?>
<message id="1">
    <sender>账号1</sender>
    <getter>账号2</getter>
    <content>发送的信息</content>
    <ip>ip地址</ip>
</message>

(B)は、XML文法

.XML接尾XML文書

(1)文書宣言

あなたは、ファイルXMを作成した後、最初のステップは、文書宣言持つ必要である(文を書いた後、文書は、テーブルの内容は、xmlファイルを書き込みます)

<?xml version="1.0" encoding="UTF-8"?>
  • バージョン:XMLのバージョン、あなたが書く必要があります

  • エンコーディング:一般的なコーディングコーディングのxml:GBK、UTF-8、ISO8859-1 ( 中国は含まれません)

    • コーディングおよびエンコーディングの設定は、それ以外の場合は、彼らが文字化けします、同じ時間を開く必要があり、時間を節約
  • スタンドアロン:他の文書に頼る必要がYES / NO

ラベルの定義(2)

注意事項

  1. ルース終了:<person></peoson>
  2. 適切にネストされました:<aa><bb></bb></aa>
  3. スペースや改行を解決するように満足しているので、我々はいくつかの問題のインデントに注意を払う必要があるかもしれません

ルールに名前を付けます

  1. コードは大文字と小文字が区別されているXML
  2. 名前は数字または句読点で始めることはできません
  3. XML、XMLやXMLなどで始めることはできません。
  4. これは、スペースやコロンを含めることはできません

定義(3)の特性

  1. ラベルの属性を持っています <person id1="aaa" id2="bbb"></person>
  2. 接続=属性値引用されたラップを使用して、プロパティ名と値の間(単一引用符と二重引用符があることがあります)

(4)注意事項

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml注释 -->

コメントは入れ子にすることはできませんし、最初の行に配置することはできません、最初の行はどのように文書宣言する必要があります

(5)特殊文字

あなたがXMLで特殊文字、エスケープ文字の必要性を、入力したい場合は、<などのラベルとして扱われますので、

文字 エスケープ文字 説明
< < 記号未満
> > 大なり記号
" " 二重引用符
" " 単一引用符

より多くの文字をエスケープする必要がある場合は、CDATA内のコンテンツを格納することができます

<![CDATA[ 内容 ]]>

(VII)PI命令(処理命令)

あなたは、XMLにスタイルを設定することができます

<?xml-stylesheet type="text/css" href="css的路径"?>

(C)は、XMLの制約

なぜ我々は拘束にそれを使用する必要がありますか?例えば、我々は今、このようなID、名前、年齢など私たちは、学生の情報を維持したいstudent.xmlファイルを、定義しますが、対応があなただけの、ビューの言語学的観点から<こんにちは>のようなタグを書く場合しかし、これは明らかに我々が保存したいものとは何の関係もありませんので、我々は技術の制約をXMLに必要な、制約はXML要素に表示されます

カテゴリー

  • DTD:比較的単純な技術的な制約
  • スキーマ:比較的複雑な技術的な制約、読むために

DTDの制約

導入(三種類)の(1)DTD方法

:内部DTDファイルを使用しては、今後の制約ルールは、XML文書で定義されています

<!DOCTYPE 根元素名称 [
    <!ELEMENT person (name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
]>

B:外部ファイルのDTDを導入

<!DOCTYPE 根元素名称 SYSTEM "dtd路径">

C:(ネットワーク上のDTDファイル)外部DTDファイルを使用して

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">

例如使用 struts2框架 使用配置文件 所使用 外部的dtd文件

<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD
Struts Configuration 2.0//EN"    
"http://struts.apache.org/dtds/struts-2.0.dtd">

(2)要素のDTDを定義します

<!ELEMENT 元素名 约束>

A:単純な要素(子を持ちません)

ELEMENT name (#PCDATA)>
    (#PCDATA): 约束name是字符串类型
    EMPTY : 元素为空(没有内容)
        - <sex></sex>
    ANY:任意

B:複雑な要素

<!-- 语法 -->
<!ELEMENT person (id,name,age,)>
    子元素只能出现一次
<!ELEMENT 元素名称 (子元素)>

<!-- 子元素出现次数 -->
* :一次多或多次
?:零次或一次
* :零次或多次

<!-- 子元素直接使用逗号隔开 -->
    表示元素出现的顺序 

<!-- 子元素直接使用 | -->
    表示元素只能出现其中的任意一个

(2)プロパティのDTDを定義します

<!-- 语法 -->
<!ATTLIST 元素名称
    属性名称 属性类型 属性的约束
>

<!-- 属性类型 -->   CDATA: 字符串
<!ATTLIST birthday
    ID1 CDATA #REQUIRED
>

<!-- 枚举 -->
表示只能在一定的范围内出现值,但是只能每次出现其中的一个,红绿灯效果
<!ATTLIST age
    ID2 (AA|BB|CC)  #REQUIRED
>

<!-- ID: 值只能是字母或者下划线开头 -->
<!ATTLIST name 
    ID3 ID   #REQUIRED
>

<!-- 属性的约束 -->
#REQUIRED:属性必须存在
#IMPLIED:属性可有可无
#FIXED: 表示一个固定值 #FIXED "AAA"
    属性的值必须是设置的这个固定值
        <!ATTLIST sex
            ID4 CDATA #FIXED "ABC"
        >

直接值
    不写属性,使用直接值
    写了属性,使用设置那个值
        <!ATTLIST school
            ID5 CDATA "WWW"
        >

スキーマの制約

XMLスキーマ構文に沿って、XMLスキーマは(Javaパッケージ名と同様に)区別するためにDTDがPCDATAタイプを複数、複数のスキーマの名前空間を持つことができますが、内部スキーマに複数のデータ型をサポートすることができます

拡張子:XSD

引入:
填写xml文档的根元素

引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    表示xml文件是一个约束文件
    
引入xsd文件命名空间.  xsi:schemaLocation="http://www.bwh.cn/xml  student.xsd"
    使用一个使用schema约束文件,直接通过这个地址引入约束文件
      通常使用一个url地址防止重名
      
为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.bwh.cn/xml" 

(1)XMLでどのように多くの要素を参照するには

<element>

(2)単純な要素と複雑な要素を見て

<element name="person">
<complexType>
<sequence>
    <element name="name" type="string"></element>
                    <element name="age" type="int"></element>
</sequence>
</complexType>
</element>

(3)文書ファイルをバインドされている制約を導入

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.bwh.cn/20151111"
xsi:schemaLocation="http://www.bwh.cn/20151111 1.xsd">

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                -- 表示xml是一个被约束文件
            xmlns="http://www.bwh.cn/20151111"
                -- 是约束文档里面 targetNamespace
            xsi:schemaLocation="http://www.bwh.cn/20151111 1.xsd">
                -- targetNamespace 空格  约束文档的地址路径

プロパティを制約することができます

A: <sequence>:表示元素的出现的顺序
B: <all>: 元素只能出现一次
C: <choice>:元素只能出现其中的一个
D: maxOccurs="unbounded": 表示元素的出现的次数
E: <any></any>:表示任意元素

写在复杂元素里面
写在 </complexType>之前

--
<attribute name="id1" type="int" use="required"></attribute>
    - name: 属性名称
    - type:属性类型 int stirng
    - use:属性是否必须出现 required

(D)XML解析

XML、必要なデータを読み出している:非常に単純な分析を理解します

(1)及び解析DOMサックス

DOM:メモリ階層構造に応じて割り当てられたXML ツリー構造、XMLタグ、属性、テキストがオブジェクトにカプセル化され、メモリへの使い捨て装填

  • 利点:操作しやすく、実装が容易なCRUD操作を

  • 短所:総メモリ、メモリオーバーフローの危険を作成します

SAX:イベント駆動型、読みながら解決するために、オブジェクトへの決意は、オブジェクト名を返します。

  • 長所:メモリを取ることはありません
  • 短所:達成していない、読み取り専用CRUD操作

(2)パーサー

道APIによって(一般的に、今日使用される二つの比較に焦点を当てたもの)に提供、我々は、DOMとSAXの方法のためのパーサを提供し、パーサ、さまざまな企業や組織を理解する必要があり、XMLを解析したいです

  1. JAXP:DOMとSAXパーサのために会社が提供する日は、効率はやや低くなっています
  2. dim4j:非常に良いパーサは、より一般的に実際の開発に使用されます
  3. JDOM:JDOM組織DOMとSAXパーサのために提供
  4. jsoup:jsoupは、Java HTMLパーサは、直接HTMLテキストをURLアドレスを解析することができます。これは、jQueryのに似て取り出し、DOM、CSSや操作方法を介してデータを操作している非常に省力化APIを提供します。
  5. プル:Androidオペレーティングシステム、組み込みパーサ、サックスの方法

(3)dom4 XMLを使用して動作

注意:すべてのJavaコードに続く、私のコードはモジュール、パスプラスの名前で書かれているので、プロジェクトは書き込みのみのsrc / s1.xmlに、ダイレクトを作成する場合

<?xml version="1.0" encoding="UTF-8"?>
<student>
    <stu id1="love">
        <name>zhangsan</name>
        <age>20</age>
    </stu>
    <stu>
        <name>lisi</name>
        <age>30</age>
    </stu>
</student>

クエリXML操作用※使用DOM4J

(A)内のすべてのname要素の値を問い合わせます

package cn.ideal.xml.dom4j;

/*
   1、创建解析器
   2、得到document
   3、得到根节点  getRootElement() 返回Element
   4、得到所有的p1标签
      * elements("p1") 返回list集合
      * 遍历list得到每一个p1
   5、得到name
      * 在p1下面执行 element("name")方法 返回Element
   6、得到name里面的值
      * getText方法得到值
*/

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class TestDom4j1 {
    //查询xml中所有name元素的值
    public static void main(String[] args) throws DocumentException {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("code-04_xml/src/s1.xml");
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到stu
        List<Element> list = rootElement.elements("stu");

        //遍历list
        for (Element element : list) {
            //element是每一个元素
            //得到name里面的值
            Element name1 = element.element("name");
            //得到name里面的值
            String s = name1.getText();
            System.out.println(s);
        }
    }
}
//运行结果
zhangsan
lisi

(B)クエリ第name要素

package cn.ideal.xml.dom4j;

/*
    1、创建解析器
    2、得到document
    3、得到根节点
    4、得到第一个stu元素
        element("stu")方法 返回Element
    5、得到p1下面的name元素
        element("name")方法 返回Element
    6、得到name元素里面的值
        getText方法
 */

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestDom4j2 {
    public static void main(String[] args) throws DocumentException {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document对象
        Document document = saxReader.read("code-04_xml/src/s1.xml");
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //得到stu下面的name元素
        Element name1 = stu.element("name");
        //得到name的值
        String s1 = name1.getText();
        System.out.println(s1);
    }
}

//运行结果
zhangsan

(III)は、第2の要素名の値を取得します。

package cn.ideal.xml.dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/*
    1、创建解析器
    2、得到document
    3、得到根节点
    4、得到所有的stu
        返回 list集合
    5、遍历得到第二个stu
        使用list下标得到 get方法,集合的下标从 0 开始,想要得到第二个值,下标写 1
    6、得到第二个p1下面的name
        element("name")方法 返回Element
    7、得到name的值
        getText方法
 */
public class TestDom4j3 {
    public static void main(String[] args) throws DocumentException {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("code-04_xml/src/s1.xml");
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到所有stu
        List<Element> list = rootElement.elements("stu");
        //得到第二个stu
        Element stu2 = list.get(1);
        //得到stu下的name
        Element name2 = stu2.element("name");
        //得到name里面的值
        String s2 = name2.getText();
        System.out.println(s2);
    }
}

※は、addオペレーションを実装dom4jの使用します

(A)第1のラベルP1の最後に要素を追加します <sex>male</sex>

package cn.ideal.xml.dom4j;

import org.dom4j.Document;

import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileOutputStream;


/*
    1、创建解析器
    2、得到document
    3、得到根节点

    4、获取到第一个p1
        使用element方法
    5、在p1下面添加元素
        在p1上面直接使用 addElement("标签名称")方法 返回一个Element

    6、在添加完成之后的元素下面添加文本
       在sex上直接使用 setText("文本内容")方法
    7、回写xml
        格式化 OutputFormat,使用 createPrettyPrint方法,表示一个漂亮的格式
        使用类XMLWriter 直接new 这个类 ,传递两个参数
        第一个参数是xml文件路径 new FileOutputStream("路径")
        第二个参数是格式化类的值
*/
public class TestDom4j4 {
    public static void main(String[] args) throws Exception {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("code-04_xml/src/s1.xml");
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //在stu下面直接添加元素
        Element sex1 = stu.addElement("sex");
        //在sex下面添加文本
        sex1.setText("male");

        //回写xml
        OutputFormat prettyPrint = OutputFormat.createPrettyPrint();//有缩进效果
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("code-04_xml/src/s1.xml"), prettyPrint);
        xmlWriter.write(document);
    }
}

ユーティリティクラスを記述し、業務の合理化

パッケージの操作方法は、パーサと定数としてパッケージ恩返しするためにXMLドキュメントを書き込む方法、渡されたファイルのパスを、作成するために省略することができます

メリット:あなたは、コードの保守性を提出することができ、開発のスピードを上げることができます

たとえば、あなたはファイルパス(名)、今回はそれだけで定数の値を変更する必要がありますを変更したい、他のコードに変更を加える必要はありません。

package cn.ideal.xml.utils;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileOutputStream;
import java.io.IOException;

public class Dom4jUtils {
    public static final String PATH = "code-04_xml/src/s1.xml";

    //返回document
    public static Document getDocument(String path) {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        try {
            Document document = saxReader.read(path);
            return document;
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return null;
    }

    //回写xml的方法
    public static void xmlWriters(String path, Document document) {
        try {
            OutputFormat prettyPrint = OutputFormat.createPrettyPrint();//有缩进效果
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path), prettyPrint);
            xmlWriter.write(document);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

私たちは、に簡素化することができる操作を実行するために上記のコードを追加します

package cn.ideal.xml.dom4j;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Element;


public class TestDom4j5 {
    public static void main(String[] args) throws Exception {

        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //在stu下面直接添加元素
        Element sex1 = stu.addElement("sex");
        //在sex下面添加文本
        sex1.setText("male");

        //回写xml
        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);
    }
}

(B)は、特定の位置に添加元素を使用して実装DOM4J

名札に続く最初のSTUの前に追加します。 <id>001</id>

package cn.ideal.xml.dom4j;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.List;

/*
    1、创建解析器
    2、得到document
    3、得到根节点
    4、获取到第一个p1

    5、获取p1下面的所有的元素
           ** elements()方法 返回 list集合

        ** 使用list里面的方法,在特定位置添加元素
       ** 首先创建元素 在元素下面创建文本
              - 使用DocumentHelper类方法createElement创建标签
              - 把文本添加到标签下面 使用 setText("文本内容")方法

         ** list集合里面的 add(int index, E element)
           - 第一个参数是 位置 下标,从0开始
           - 第二个参数是 要添加的元素
      6、回写xml
*/
public class TestDom4j6 {
    //在第一个stu下面的name标签前添加<id>001</id>
    public static void main(String[] args) {
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //获取stu下全部元素
        List<Element> list = stu.elements();
        //创建元素
        Element id = DocumentHelper.createElement("id");
        //在id下面创建文本
        id.setText("001");
        //在特定位置添加
        list.add(0, id);

        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);
    }
}

(C)の動作を変更するには、ノードを使用して実装DOM4J

ある18歳以下の最初の素子P1を変更します。

package cn.ideal.xml.dom4j;
/*
    1、得到document
    2、得到根节点,然后再得到第一个p1元素
    3、得到第一个p1下面的age
      element("")方法
    4、修改值是 30
       使用setText("文本内容")方法
    5、回写xml
*/

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j7 {
    public static void main(String[] args) {
        //得到document
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //得到第一个stu下面的age
        Element age = stu.element("age");
        age.setText("18");
        //回写xml
        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);
    }
}

※使用DOM4Jは、ノード削除操作を実現します

package cn.ideal.xml.dom4j;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j8 {
    public static void main(String[] args) {
        //得到document
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //得到第一个stu下面的age
        Element id = stu.element("id");

        stu.remove(id);
        //回写xml
        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);
    }
}

使用DOM4Jは、プロパティの動作を取得します

package cn.ideal.xml.dom4j;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j9 {
    public static void main(String[] args) {
        //得到document
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到第一个stu元素
        Element stu = rootElement.element("stu");
        //得到stu里面的属性值
        String value = stu.attributeValue("id1");
        System.out.println(value);
    }
}

(4)特定の操作DOM4J支持XPathを使用して

XPathは、 XML文書の一部の位置を決定するために使用される言語であるXMLパス言語(XMLパス言語)であります

デフォルトでは、dom4jのは、XPathをサポートしていません。

サポートのXPathのjarパッケージを導入する使用したい場合は、必要性、にJaxen-1.1-β-6.jarを使用

第一种形式
    /AAA/CCC/BBB: 表示一层一层的,AAA下面CCC下面的BBB
第二种形式
    //BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
第三种形式
    /*: 所有元素
第四种形式
    BBB[1]: 表示第一个BBB元素
    BBB[last()]:表示最后一个BBB元素
第五种形式
    //BBB[@id]: 表示只要BBB元素上面有id属性,都得到
第六种形式
    //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1

XPathをサポートするために、2つのメソッドを提供しDOM4J

//获取多个节点
selectNodes("xpath表达式")

//获取一个节点
selectSingleNode("xpath表达式")

(A)を達成するためにXPathを使用:XMLでのクエリの値の名前のすべての要素を

package cn.ideal.xml.dom4j.xpath;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Node;

import java.util.List;

public class TestDom4jXpath1 {
    //查询xml中所有name元素的值
    public static void main(String[] args) {
        //得到document
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //获取所有name元素
        List<Node> list = document.selectNodes("//name");
        //遍历list集合
        for (Node node : list) {
            //node是每一个name元素
            //得到name元素里面的值
            String s = node.getText();
            System.out.println(s);
        }
    }
}

(B)は、XPathを使用して実装:STU以下最初の値の名前を取得します

package cn.ideal.xml.dom4j.xpath;

import cn.ideal.xml.utils.Dom4jUtils;
import org.dom4j.Document;
import org.dom4j.Node;

public class TestDom4jXpath2 {
    public static void main(String[] args) {
        //得到document
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        Node name1 = document.selectSingleNode("//stu[@id1='love']/name");
        //得到name里面的值
        String s1 = name1.getText();
        System.out.println(s1);
    }
}

(4)動作XML Jsoup

package cn.ideal.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;

public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        //获取Documnet对象
        //通过类加载器,获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //解析xml文档,加载文档进内存,获取dom树 --> Document
        Document document = Jsoup.parse(new File(path), "utf-8");
        //获取元素对象 Element
        Elements elements = document.getElementsByTag("name");

        //获取第一个name
        Element element = elements.get(0);
        //获取数据
        String name = element.text();
        System.out.println(name);
    }
}

上記従来のオブジェクトの説明

1. Jsoup:ツール:あなたがHTMLやXML文書を解析することができ、リターンドキュメント

パース:

//解析xml或html文件
parse (File in, String charsetName)

//解析xml或html字符串
parse (String html)

//通过网络路径获取指定的html或xml
parse (URL url, int timeoutMillis)

2.ドキュメント:ドキュメントオブジェクト:DOMツリーがメモリを表し、

:Elementオブジェクトを取得します

//根据id属性值获取唯一的element对象
getElementById (String id)

//根据标签名称获取元素对象集合
getElementsByTag (String tagName)

//根据属性名称获取元素对象集合
getElementsByAttribute (String key)

//根据对应的属性名和属性值获取元素对象集合
getElementsByAttributeValue (String key, String value)

3.要素:要素のコレクションElementオブジェクト。おおよその考えることができますArrayList<Element>

:Elementオブジェクト2とを取得します

B:プロパティ値を取得

String attr(String key):根据属性名称获取属性值

C:テキストコンテンツを取得

//获取文本内容
String text()

//获取标签体的所有内容
String html()

検索するより効率的な方法の二種類

セレクタ:セレクタ

Elements select(String cssQuery)
//具体语法,看文档格式
<?xml version="1.0" encoding="UTF-8"?>
<student>
    <stu number="stu_001">
        <name id="ideal">zhangsan</name>
        <age>18</age>
    </stu>
    <stu number="stu_002">
        <name>lisi</name>
        <age>30</age>
    </stu>
</student>
package cn.ideal.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;

public class SelectorDemo {
    public static void main(String[] args) throws IOException {
        //获取Documnet对象
        //通过类加载器,获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //解析xml文档,加载文档进内存,获取dom树 --> Document
        Document document = Jsoup.parse(new File(path), "utf-8");

        //查询name标签
        Elements elements1 = document.select("name");
        System.out.println(elements1);

        System.out.println("--------------");

        //查询id值为 stu_001
        Elements elements2 = document.select("#ideal");
        System.out.println(elements2);

        System.out.println("--------------");

        Elements elements3 = document.select("stu[number='stu_001']");
        System.out.println(elements3);

    }
}

//运行结果
<name id="ideal">
 zhangsan
</name>
<name>
 lisi
</name>
--------------
<name id="ideal">
 zhangsan
</name>
--------------
<stu number="stu_001"> 
 <name id="ideal">
  zhangsan
 </name> 
 <age>
  18
 </age> 
</stu>

XPathの

package cn.ideal.xml.jsoup;

import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.File;
import java.util.List;

public class XpathDemo {
    public static void main(String[] args) throws Exception {
//获取Documnet对象
        //通过类加载器,获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //解析xml文档,加载文档进内存,获取dom树 --> Document
        Document document = Jsoup.parse(new File(path), "utf-8");

        //创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);

        //结合xpath语法查询
        List<JXNode> jxNodes = jxDocument.selN("//stu");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }
    }
}

//运行结果
<stu number="stu_001"> 
 <name id="ideal">
  zhangsan
 </name> 
 <age>
  18
 </age> 
</stu>
<stu number="stu_002"> 
 <name>
  lisi
 </name> 
 <age>
  30
 </age> 
</stu>
//查询stu标签下的name标签
List<JXNode> jxNodes = jxDocument.selN("//student/name");

//查询stu标签下带有id属性且属性值ideal的name标签
List<JXNode> jxNodes = jxDocument.selN("//stu/name[@id='ideal']");

終了:

間違った場所に不備、またはコンテンツがある場合は、私に叫ぶのアドバイス、カニのみんなを与えることを歓迎します!^ _ ^

あなたが助けることができるなら、それは私に注意を払うことです!(記事の更新シリーズは初めて公衆の数になります)

ここでは、すべて自分のための夢や仕事で、見知らぬ人です❤

2の上に10日以上:スティック元のJavaテクノロジのパブリック番号を押してください

おすすめ

転載: www.cnblogs.com/ideal-20/p/11364679.html