XML 및 Dom4J

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();
	}
}

추천

출처blog.csdn.net/ExceptionCoder/article/details/108291243