XML
定義:eXtensible Markup Language:拡張可能なマークアップ言語
機能:汎用データ交換フォーマット(つまり、データはさまざまな言語で使用できる)であるため、構成ファイルとして
ソース:XMLテクノロジーはW3C組織(World Wide Web Consortium)がリリースされました。リリースは完璧なため、常にバージョン1.0でした。
詳細の
記述:1. Eclipseは特定のファイルをすばやく作成します:ウィンドウ—>パースペクティブ—>パースペクティブのカスタマイズ—>ショートカット—>対応するファイルタイプにチェックを入れます
2. XMLファイルの最初の行:<?xml version = "1.0" encoding = " UTF-8 "?>
3. XMLには一意のルートタグが必要です
4.特殊文字はエスケープする必要があります:&—&amp; <—&lt;> —&gt;" —&quot; '—&apos
5.特殊文字があるため、エスケープするか、CDATA領域に書き込んでください(パーサーは内部のコンテンツを解析しません)
<![CDATA [* <> <> <> <> <>&^ *(^ *(^&*(3sdfjpwrjp2024372394j * (* <> *))>
XML制約:dtdとスキーマ
制約の役割:作成するときは、(独自の要件に従って)xmlタグを標準化し、ツールに対応するヒントを用意できます!
dtd
スキーマdtdとスキーマ
の違い:
dtd:誰もそれを制限しない、それは間違って書くのは簡単です、関数はより単純でなければなりません
スキーマ:それを制限するための対応するタグがあり、関数はより強力なので、より複雑です
================================================== ============
DOM:Document Object Model。
タグに従ってxmlファイルをツリー構造に変換し、各要素はNodeオブジェクトに解析されます。
================================================== ===========
Dom4JはXMLを解析します
。1.ガイドパッケージ:dom4j-1.6.1.jar
2. XPath:XMLパス言語。XMLドキュメントの特定の部分の場所を特定するために使用される言語です。XPathはXMLツリー構造に基づいており、要素ノード、属性ノード、テキストノードなどのさまざまなタイプのノードがあり、データ構造ツリーでノードを検索する機能を提供します。
(つまり、XPathはXMLドキュメントの情報を見つけるための言語であり、XMLドキュメントの要素と属性をナビゲートするために使用されます。)
3.注:XPathを使用してノード検索のdom4jを簡略化する場合、jaxen-1.1-betaに依存します。 -6.jar、パッケージ
4のガイドを忘れないでください。2種類の分析:XPathの指定された場所から下位レベルのラベル__or__を取得して、
拡張されたコールド知識を取得します。
public class ParseXmlTest {
/**解析XML文件时,如果XML用了约束,但是程序找不到对应的约束文件,是会报错的*/
File file = new File("dtd/contacts.xml");
private Document getDoc() throws DocumentException {
//1.别人写好的类和对象:解析器,Reader,字符输入流
SAXReader reader = new SAXReader();
//2.document代表了 文档
Document document = reader.read(file);
return document;
}
/**
* 读取xml数据
*/
@Test
public void testName() throws Exception {
//通过解析器字符流,将硬盘上的文件加载到内存上,返回Document对象
Document document = getDoc();
//3.获得根标签
Element root = document.getRootElement();
//4.通过父标签获得子标签
Element linkman = root.element("linkman");
Element name = linkman.element("name");
//5.获取文本信息
System.out.println(name.getText());
}
/**
* 通过xpath解析xml
*/
@Test
public void testXpath() throws Exception {
Document doc = getDoc();
//XML中的所有对象都是Node对象
//通过XPath获得指定节点对象
Node node = doc.selectSingleNode("/contacts/linkman[1]/name");
String text = node.getText();
System.out.println(text);
}
/**
* 其实增删改,就是先把xml读取到内存中,对DOM对象操作之后,再输出到硬盘上
*/
/**
* xml添加操作
*/
@Test
public void testAdd() throws Exception {
Document doc = getDoc()
Element contacts = doc.getRootElement();
//contacts下面添加了linkman ,返回的就是linkman对象
Element linkman = contacts.addElement("linkman");
//linkman添加属性
linkman.addAttribute("id", "3");
linkman.addElement("name").setText("sss");
linkman.addElement("email").setText("[email protected]");
linkman.addElement("address").setText("北京");
linkman.addElement("group").setText("仙女");
//原生的格式:数据都在一行,丑但是节约空间
/* XMLWriter writer = new XMLWriter(
new FileWriter( file )
);
writer.write( doc );
writer.close();*/
prettyPrint(doc);
}
/**
* 更新操作
*/
@Test
public void testUpdate() throws Exception {
Document doc = getDoc();
Node name = doc.selectSingleNode("/contacts/linkman[2]/name");
name.setText("qq");
prettyPrint(doc);
}
/**
* 删除操作
* remove方法只有Element接口有,Node接口没有,所以要强转
*/
@Test
public void testRemove() throws Exception {
Document doc = getDoc();
Element linkman = (Element)doc.selectSingleNode("/contacts/linkman[2]");
Node name = doc.selectSingleNode("/contacts/linkman[2]/name");
//父节点移除子节点
linkman.remove(name);
//或者节点自己获取父节点,来移除自己
//name.getParent().remove(name);
prettyPrint(doc);
}
/**
* 将内存中的Document按照标准xml格式输出,不然就是一行,不好看
*/
private void prettyPrint(Document doc) throws IOException {
//漂亮打印
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter( new FileWriter( file ), format );
writer.write( doc );
writer.close();
}
}