記事のディレクトリ
1 DOM4Jのご紹介
DOM4JはパーサDOM4Jを提供する、XML解析のための組織です。
あなたが使用したい、のdom4jのではないのJava SE一部:
インポートdom4jのに必要な最初のステップは、jarファイルのパッケージを提供
ドキュメントを取得します
public class SAXReader extends java.lang.Object
SAXReader reader = new SAXReader();
Document document = reader.read(url);
Documentインタフェースは、親ノードである
あなたがノードに内部を見つけ、文書法ではしたくない場合- |。
方法 | 説明 |
---|---|
公共要素getRootElement() | ルートノードを取得し、要素を返します |
要素がインターフェイスで、インターフェイスは、親ノードがあります
方法 | 説明 |
---|---|
公共要素のgetParent() | 親ノードを取得します。 |
公共要素はaddElement | タグを追加します |
公共要素要素(QNAME) | 最初のサブラベル以下のラベルを取得し、QNAMEは名札を指し、 |
公共のリスト要素(QNAME) | すべてのタグ(1)の子下記取得し、QNAMEは名札を指し、 |
パブリックリストの要素を() | それは、(1)以下のサブラベル・タグのすべてを取得します |
クエリXML操作のための2を使用DOM4J
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1 id1="love">
<name>lks</name>
<age>30</age>
</p1>
<p1>
<name>hhy</name>
<age>20</age>
</p1>
</person>
クエリ内のすべてのname要素の値。
(1)パーサを作成します。
(2)文書得た
ルートノードを与える(3)
(4)タグは、P1の全てを取得する:使用要素(QNAME)メソッドは、P1のそれぞれを与えるために、リストをトラバース次いで、すべてのコレクションのリストを返します。
(5)名前与える:P1の実行要素(QNAME)メソッドは、要素の戻り
値を取得するためのgetText()メソッド名の値を(6)得られた内部を
public static void allName() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/dom4jlearn/person.xml");
Element root = document.getRootElement();
List<Element> p1 = root.elements("p1");
for(Element e : p1) {
Element name = e.element("name");
String str = name.getText();
System.out.println(str);
}
}
最初のクエリname要素の値。
(1)パーサを作成します。
(2)ドキュメントを得た
(図3)のルートノードを与える
(4)に与えるP1最初の要素
(5)は、次のP1名要素与える
(6)名要素内部の値を与えるために
public static void getFirstName() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/dom4jlearn/person.xml");
Element root = document.getRootElement();
Element p1 = root.element("p1");
Element name = p1.element("name");
System.out.println(name.getText());
}
name要素の2番目のクエリ値。
(1)パーサを作成します。
文献から得て、(2)
ルートノードを与える(3)
(4)は、全てのP1要素与える
第2のトラバースP1を得た(5)
(6)次の第二のP1 name要素与える
名要素内部の値を与えるために(7)
public static void getSecondName()throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/dom4jlearn/person.xml");
Element root = document.getRootElement();
List<Element> p1 = root.elements("p1");
Element name = p1.get(1).element("name");
System.out.println(name.getText());
}
3つの使用DOM4Jの追加ノードが最後に達成するために
最初P1ラベルの最後に要素を追加します<sex>女</sex>
。
(1)パーサを作成します。
(2)ドキュメントを得た
ルートノード得た(3)
最初のP1を得るために(4):use要素()メソッド
(5)次のP1添加元素:使用p1.addElement(「性別」)方法が要素を返します
(6)次のテキストを追加する要素の終了後:性別使用のsetText(「テキスト」)方法
createPrettyPrint()、使用するXMLWriter、直接新しい、伝記を使用してフォーマット(OUTPUTFORMAT)、(7)書き込みXMLへ戻ります2つのパラメータは、最初のパラメータであるXMLパスは、第2のパラメータは、フォーマットタイプの値です。書き込み()書き戻しを使用した後
public static void addSex() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/dom4jlearn/person.xml");
Element root = document.getRootElement();
Element p1 = root.element("p1");
Element sex = p1.addElement("sex");
sex.setText("女");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4jlearn/person.xml"), format);
xmlWriter.write(document);
}
4 DOM4Jは、特定の位置に追加の要素を使用して実装しました
年齢ラベルの下の最初のP1の前に追加<school>fjut</school>
のパーサを作成するために、(1)。
文献から得て、(2)
ルートノード与える(3)
最初のP1の(4)取得
(5)全ての素子P1を得る:要素()メソッドは、リストのコレクションを返し
アド内部A法(6)リスト(INTインデックス、Eの要素)は、特定の場所の要素に追加
| - DocumentHelper.createElementを使用して要素を作成()、下のテキストを作成します。
(7)ライトバックXML
```java
public static void addSchool() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(PATH);
Element root = document.getRootElement();
Element p1 = root.element("p1");
List<Element> list = p1.elements();
Element school = DocumentHelper.createElement("school");
school.setText("fjut");
list.add(1, school);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(PATH), format);
xmlWriter.write(document);
}
# 5 dom4j里面封装方法的操作
可以对得到document的操作和回写xml操作,封装成方法,也可以把传递的文件路径,封装成一个常量,好处是可以提高开发速度,可以提高代码可维护性。
1、返回document:public static Document getDocument(String path)
2、回写xml:public static void xmlWriters(String path, Document document);
```java
public final static String PATH = "src/dom4jlearn/person.xml";
public static Document getDocument() {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(PATH);
return document;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void xmlWriters(Document document) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(PATH), format);
xmlWriter.write(document);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
6変性ノード演算実装DOM4Jを使用して
要素次の第1の値P1年齢を修正<age>30</age>
(1)ドキュメントを得た
(2)に与えるP1第素子
P1以下最初の年齢取得する(3)
30の値を変更する(4)
(5)ライトバックXML
public static void modifyAge() {
Document document = Dom4jUtils.getDocument();
Element root = document.getRootElement();
Element p1 = root.element("p1");
Element age = p1.element("age");
age.setText("300");
Dom4jUtils.xmlWriters(document);
}
7使用dom4jのは、ノード削除操作を実現します
削除P1は、下にある<school>fjut</school>
ドキュメント与えるために(1)
(2)ルートノードを求める
(3)第1のラベルP1を求める
(4)第一学校素子P1で得られた
(5)削除P1学校の要素を用いて
(6) XMLの書き込みバック
public static void removeSchool() {
Document document = getDocument();
Element root = document.getRootElement();
Element p1 = root.element("p1");
Element school = p1.element("school");
p1.remove(school);
xmlWriters(document);
}
8 DOM4Jは、取得した操作の属性値を使用して実装しました
属性ID1のP1の内部の最初の値を取得します。
(1)文書を与えるために
(2)ルートノード取得
(3)最初のP1要素得る
第1の素子P1のプロパティ値を取得し(4)、公衆文字属性値(String属性) 。
public static void getAttribute() {
Document document = getDocument();
Element root = document.getRootElement();
Element p1 = root.element("p1");
System.out.println(p1.attributeValue("id1"));
}