XML - XML 解析用の DOM4J
まず第一に、なぜ Dom4j があるのでしょうか?
DOM はメモリを大量に消費し、SAX は XML を読み取ることしかできず、追加や削除などができないためです。そこで、より効率的で、下品な操作も実行できる Dom4j が登場しました。
1. DOM4J の概要
Dom4j は、シンプルで柔軟なオープンソース ライブラリです。 Dom4j は JDOM の初期開発者から分離され、その後独立して開発されました。 JDOM とは異なり、dom4j はインターフェイスと抽象基本クラスを使用します。Dom4j の API は比較的複雑ですが、JDOM よりも優れた柔軟性を備えています。
Dom4j は、優れたパフォーマンス、強力な機能を備え、非常に使いやすい、非常に優れた Java XML API です。現在、同じく Dom4j を使用する Sun 独自の JAXP を含む、Hibernate などの多くのソフトウェアが Dom4j を使用しています。
Dom4j を使用して開発するには、対応する dom4j の jar ファイルをダウンロードし、プロジェクトにインポートする必要があります。ダウンロード アドレス dom4j download
2.DOM4J case
以前の XML ファイルを引き続き使用します:
<?xml version="1.0" encoding="utf-8" standalone="no"?><班级> <学生 地址="香港"> <名字>周小星</名字> <年龄>23</年龄> <介绍>学习刻苦</介绍> </学生> <学生 地址="澳门"> <名字>林晓</名字> <年龄>25</年龄> <介绍>是一个好学生</介绍> </学生></班级>
このドキュメントは com.dom4j.test
パッケージに配置されています。 com.dom4j.test
包中。
使用DOM4J也要获取代表整个文档Document
对象,不过这个Document对象是org.dom4j
包中的。
在主方法中获取Document对象如下:
// 1.得到一个解析器SAXReader saxReader = new SAXReader(); // 2.指定解析哪个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));
然后我们就可以根据需求来写相应的方法,在主方法中调用。
【1】指定读取某个元素(读取第一个学生的信息)
public static void read(Document document) { // 得到根元素 Element root = document.getRootElement(); // root.elements("学生"):表示取出root下的所有学生元素 // root.element("学生"):表示取出root下的第一个学生元素 Element student = root.element("学生"); // 取出属性 String address = student.attributeValue("地址"); // 取出各个子节点的值 String name = student.element("名字").getText(); String age = student.element("年龄").getText(); String intro = student.element("介绍").getText(); System.out.println(address); System.out.println(name); System.out.println(age); System.out.println(intro); }
【2】添加元素:添加一个学生信息到XML文档中
public static void add(Document document) throws Exception { // 首先我们来创建一个学生节点对象 Element student = DocumentHelper.createElement("学生"); Element name = DocumentHelper.createElement("名字"); name.setText("小强"); Element age = DocumentHelper.createElement("年龄"); age.setText("22"); Element intro = DocumentHelper.createElement("介绍"); intro.setText("是一个三好学生"); // 把三个子元素加到student节点下 student.add(name); student.add(age); student.add(intro); // 为学生添加属性 student.addAttribute("地址", "大理"); // 将学生节点添加到根节点下 document.getRootElement().add(student); // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); // 这里一定要用FileOutputStream字节流输出,不能用FileWriter,否则还会有乱码 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
添加学生到XML文档中,也需要在最后将内存中的Document对象写入相应的文件,不然所有的操作只是在内存中进行,并不会输出到文件中,这与DOM类似。
我们依然可以将这段更新的代码单独写成一个方法,如下:
public static void update(Document document) throws Exception { // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
【3】添加一个元素到指定位置
public static void addByIndex(Document document) throws Exception { // 创建一个元素 Element newStu = DocumentHelper.createElement("学生"); newStu.setText("王小明"); // 得到所有学生的list List allStudent = document.getRootElement().elements("学生"); allStudent.add(1, newStu); update(document); }
这里其实是直接在得到的List
中添加,然后更新即可。这里的List
就是java.util
包中的List
【4】删除一个元素或者删除这个元素的属性
删除一个元素与DOM类似,都是通过相应的父节点删除该节点。比方说我们要删除第一个学生节点:
public static void delete(Document document) throws Exception { // 找到该元素 Element student = document.getRootElement().element("学生"); // 删除元素的某个属性 student.remove(student.attribute("地址")); // 通过父节点删除节点 student.getParent().remove(student); update(document); }
【5】更新元素
比如我们要把所有学生的年龄加1,并且将所有学生的地址属性改为美国:
public static void updateAgeAndAddress(Document document) throws Exception { Element root = document.getRootElement(); List<Element> list = root.elements(); for (Element element : list) { // 更新属性 element.addAttribute("地址", "美国"); // 更新年龄子节点的值 Element e_age = element.element("年龄"); int age = Integer.parseInt(e_age.getTextTrim()); e_age.setText(String.valueOf(age + 1)); } update(document); }
首先为什么会有Dom4j呢?
因为DOM太耗内存,而SAX只能对XML进行读取,而不能去添加、删除等。所以出现了Dom4j,它的效率更高,同时也可以进行crud操作。
1.DOM4J介绍
Dom4j是一个简单、灵活地开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括Sun公司自己的JAXP也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件,并导入到项目。下载地址dom4j下载
2.DOM4J案例
依然使用我们之前的XML文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?><班级> <学生 地址="香港"> <名字>周小星</名字> <年龄>23</年龄> <介绍>学习刻苦</介绍> </学生> <学生 地址="澳门"> <名字>林晓</名字> <年龄>25</年龄> <介绍>是一个好学生</介绍> </学生></班级>
该文档放在com.dom4j.test
包中。
使用DOM4J也要获取代表整个文档Document
对象,不过这个Document对象是org.dom4j
包中的。
在主方法中获取Document对象如下:
// 1.得到一个解析器SAXReader saxReader = new SAXReader(); // 2.指定解析哪个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));
然后我们就可以根据需求来写相应的方法,在主方法中调用。
【1】指定读取某个元素(读取第一个学生的信息)
public static void read(Document document) { // 得到根元素 Element root = document.getRootElement(); // root.elements("学生"):表示取出root下的所有学生元素 // root.element("学生"):表示取出root下的第一个学生元素 Element student = root.element("学生"); // 取出属性 String address = student.attributeValue("地址"); // 取出各个子节点的值 String name = student.element("名字").getText(); String age = student.element("年龄").getText(); String intro = student.element("介绍").getText(); System.out.println(address); System.out.println(name); System.out.println(age); System.out.println(intro); }
【2】添加元素:添加一个学生信息到XML文档中
public static void add(Document document) throws Exception { // 首先我们来创建一个学生节点对象 Element student = DocumentHelper.createElement("学生"); Element name = DocumentHelper.createElement("名字"); name.setText("小强"); Element age = DocumentHelper.createElement("年龄"); age.setText("22"); Element intro = DocumentHelper.createElement("介绍"); intro.setText("是一个三好学生"); // 把三个子元素加到student节点下 student.add(name); student.add(age); student.add(intro); // 为学生添加属性 student.addAttribute("地址", "大理"); // 将学生节点添加到根节点下 document.getRootElement().add(student); // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); // 这里一定要用FileOutputStream字节流输出,不能用FileWriter,否则还会有乱码 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
添加学生到XML文档中,也需要在最后将内存中的Document对象写入相应的文件,不然所有的操作只是在内存中进行,并不会输出到文件中,这与DOM类似。
我们依然可以将这段更新的代码单独写成一个方法,如下:
public static void update(Document document) throws Exception { // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat OutputFormat output = OutputFormat.createPrettyPrint(); // 设置输出的编码为utf-8 output.setEncoding("utf-8"); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output); xmlWriter.write(document); xmlWriter.close(); }
【3】添加一个元素到指定位置
public static void addByIndex(Document document) throws Exception { // 创建一个元素 Element newStu = DocumentHelper.createElement("学生"); newStu.setText("王小明"); // 得到所有学生的list List allStudent = document.getRootElement().elements("学生"); allStudent.add(1, newStu); update(document); }
这里其实是直接在得到的List
中添加,然后更新即可。这里的List
就是java.util
包中的List
Document
オブジェクトも取得する必要がありますが、この Document オブジェクトは org.dom4j
パッケージ内にあります。 次のように main メソッドで Document オブジェクトを取得します: public static void delete(Document document) throws Exception { // 找到该元素
Element student = document.getRootElement().element("学生"); // 删除元素的某个属性
student.remove(student.attribute("地址")); // 通过父节点删除节点
student.getParent().remove(student);
update(document);
}
【1】特定の要素の読み込みを指定(最初の生徒の情報を読み込む)
public static void updateAgeAndAddress(Document document) throws Exception {
Element root = document.getRootElement();
List<Element> list = root.elements(); for (Element element : list) { // 更新属性
element.addAttribute("地址", "美国"); // 更新年龄子节点的值
Element e_age = element.element("年龄"); int age = Integer.parseInt(e_age.getTextTrim());
e_age.setText(String.valueOf(age + 1));
}
update(document);
}
List
を直接追加します。それを入れて更新します。ここでのList
はjava.util
パッケージ内のList
です🎜🎜🎜🎜【4】要素の削除、またはこの要素の属性の削除🎜 🎜 要素の削除は、対応する親ノードを通じてノードが削除されるという点で DOM に似ています。たとえば、最初の学生ノードを削除します: 🎜rrreee🎜🎜🎜[5] 要素を更新します 🎜 🎜たとえば、すべての学生の年齢に 1 を追加し、すべての学生の住所属性を米国に変更したいとします。州: 🎜rrreee🎜なぜ最初に Dom4j があるのでしょうか? 🎜🎜🎜DOM はメモリを大量に消費し、SAX は XML を読み取ることしかできず、追加や削除などができないためです。そこで、より効率的で、下品な操作も実行できる Dom4j が登場しました。 🎜🎜🎜🎜1. DOM4J の概要🎜🎜🎜🎜🎜Dom4j は、シンプルで柔軟なオープンソース ライブラリです。 Dom4j は JDOM の初期開発者から分離され、その後独立して開発されました。 JDOM とは異なり、dom4j はインターフェイスと抽象基本クラスを使用しますが、Dom4j の API は JDOM よりも優れた柔軟性を備えています。 🎜🎜🎜🎜Dom4j は、優れたパフォーマンス、強力な機能を備え、非常に使いやすい、非常に優れた Java XML API です。現在、同じく Dom4j を使用する Sun 独自の JAXP を含む、Hibernate などの多くのソフトウェアが Dom4j を使用しています。 🎜🎜🎜🎜 Dom4j を使用して開発するには、対応する dom4j の jar ファイルをダウンロードし、プロジェクトにインポートする必要があります。ダウンロード アドレス dom4j download🎜🎜🎜🎜🎜2.DOM4J case🎜🎜🎜 以前の XML ファイルを引き続き使用します:🎜rrreee🎜 このドキュメントは com.dom4j.test
パッケージに配置されています。 🎜🎜DOM4J を使用する場合、ドキュメント全体を表す Document
オブジェクトも取得する必要がありますが、この Document オブジェクトは org.dom4j
パッケージ内にあります。 🎜🎜次のように main メソッドで Document オブジェクトを取得します: 🎜rrreee🎜 次に、必要に応じて対応するメソッドを記述し、main メソッドで呼び出すことができます。 🎜🎜🎜【1】特定の要素の読み込みを指定(最初の生徒の情報を読み込む)🎜🎜rrreee🎜🎜🎜【2】要素の追加:XML文書に生徒の情報を追加🎜🎜rrreee🎜XML文書に生徒を追加そうでない場合、すべての操作はメモリ内でのみ実行され、ファイルには出力されません。これは DOM と似ています。 🎜この更新されたコードは、次のように別のメソッドとして記述することもできます: 🎜rrreee🎜🎜🎜【3】指定された位置に要素を追加します🎜🎜rrreee🎜実際に取得した List
を直接追加します。それを入れて更新します。ここでのList
はjava.util
パッケージ内のList
です🎜🎜🎜🎜【4】要素の削除、またはこの要素の属性の削除🎜 🎜 要素の削除は、対応する親ノードを通じてノードが削除されるという点で DOM に似ています。例えば、最初の学生ノードを削除したいです: 🎜rrreee🎜🎜🎜【5】要素を更新🎜 🎜例えば、全学生の年齢に1を加え、全学生の住所属性を米国に変更したいとします。州: 🎜public static void updateAgeAndAddress(Document document) throws Exception { Element root = document.getRootElement(); List<Element> list = root.elements(); for (Element element : list) { // 更新属性 element.addAttribute("地址", "美国"); // 更新年龄子节点的值 Element e_age = element.element("年龄"); int age = Integer.parseInt(e_age.getTextTrim()); e_age.setText(String.valueOf(age + 1)); } update(document); }
以上就是XML—XML解析之DOM4J的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











XML ファイルは PPT で開くことができますか? XML、Extensible Markup Language (Extensible Markup Language) は、データ交換とデータ ストレージで広く使用されている汎用マークアップ言語です。 HTML と比較して、XML はより柔軟であり、独自のタグとデータ構造を定義できるため、データの保存と交換がより便利で統一されます。 PPT (PowerPoint) は、プレゼンテーションを作成するために Microsoft によって開発されたソフトウェアです。包括的な方法を提供します。

Python を使用した XML データのマージと重複排除 XML (eXtensibleMarkupLanguage) は、データの保存と送信に使用されるマークアップ言語です。 XML データを処理するとき、複数の XML ファイルを 1 つにマージしたり、重複データを削除したりする必要がある場合があります。この記事では、Python を使用して XML データのマージと重複排除を実装する方法と、対応するコード例を紹介します。 1. XML データのマージ 複数の XML ファイルがある場合、それらをマージする必要があります。

Python の XML データを CSV 形式に変換する XML (ExtensibleMarkupLanguage) は、データの保存と送信に一般的に使用される拡張可能なマークアップ言語です。 CSV (CommaSeparatedValues) は、データのインポートとエクスポートに一般的に使用されるカンマ区切りのテキスト ファイル形式です。データを処理するとき、分析や処理を容易にするために、XML データを CSV 形式に変換する必要がある場合があります。 Pythonは強力です

Python を使用した XML データのフィルタリングと並べ替えの実装 はじめに: XML は、データをタグと属性の形式で保存する、一般的に使用されるデータ交換形式です。 XML データを処理するとき、多くの場合、データのフィルタリングと並べ替えが必要になります。 Python には、XML データを処理するための便利なツールとライブラリが多数用意されています。この記事では、Python を使用して XML データをフィルタリングおよび並べ替える方法を紹介します。 XML ファイルの読み取り 始める前に、XML ファイルを読み取る必要があります。 Python には XML 処理ライブラリが多数ありますが、

PHP を使用した XML データのデータベースへのインポート はじめに: 開発中、さらなる処理や分析のために外部データをデータベースにインポートする必要がよくあります。一般的に使用されるデータ交換形式として、XML は構造化データの保存と送信によく使用されます。この記事では、PHP を使用して XML データをデータベースにインポートする方法を紹介します。ステップ 1: XML ファイルを解析する まず、XML ファイルを解析し、必要なデータを抽出する必要があります。 PHP には XML を解析するためのいくつかの方法が用意されており、最も一般的に使用されるのは Simple を使用する方法です。

Python は XML と JSON 間の変換を実装します はじめに: 日常の開発プロセスでは、異なる形式間でデータを変換する必要があることがよくあります。 XML と JSON は一般的なデータ交換形式であり、Python ではさまざまなライブラリを使用して XML と JSON の間で変換できます。この記事では、一般的に使用されるいくつかの方法をコード例とともに紹介します。 1. Python で XML を JSON に変換するには、xml.etree.ElementTree モジュールを使用できます。

Python を使用した XML でのエラーと例外の処理 XML は、構造化データの保存と表現に使用される一般的に使用されるデータ形式です。 Python を使用して XML を処理すると、エラーや例外が発生することがあります。この記事では、Python を使用して XML のエラーと例外を処理する方法を紹介し、参考用のサンプル コードをいくつか示します。 Try-Except ステートメントを使用して XML 解析エラーを捕捉する Python を使用して XML を解析すると、時々、次のようなエラーが発生することがあります。

Python は XML 内の特殊文字とエスケープ シーケンスを解析します XML (eXtensibleMarkupLanguage) は、異なるシステム間でデータを転送および保存するために一般的に使用されるデータ交換形式です。 XML ファイルを処理する場合、特殊文字やエスケープ シーケンスが含まれる状況に遭遇することが多く、これにより解析エラーやデータの誤解が生じる可能性があります。したがって、Python を使用して XML ファイルを解析する場合は、これらの特殊文字とエスケープ シーケンスの処理方法を理解する必要があります。 1. 特殊文字と
