XML
정의 : eXtensible Markup Language : 확장 가능한 마크 업 언어
기능 : 범용 데이터 교환 형식 (즉, 데이터를 다른 언어로 사용할 수 있음)이기 때문에 구성 파일로서
출처 : XML 기술은 W3C 조직입니다. (World Wide Web Consortium) 출시, 출시가 완벽하기 때문에 항상 버전 1.0이었습니다.
세부 정보 작성 :
1. Eclipse는 특정 파일을 빠르게 만듭니다. Window—> Perspective—> Perspective 사용자 정의 —> 바로 가기 —> 해당 파일 유형을 선택합니다.
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. 두 가지 분석 : XPath 지정 위치를 통해 하위 레벨 레이블 __or__를 확보하여
확장 된 콜드 지식 을 확보하십시오 . 중간 4는 실제로 간단하고 이해하기위한 것입니다 ~
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();
}
}