>  기사  >  백엔드 개발  >  XML에 대한 더 깊은 이해를 제공합니다.

XML에 대한 더 깊은 이해를 제공합니다.

Y2J
Y2J원래의
2017-04-26 10:12:081502검색

1. XML: 확장 가능 마크업 언어 버전="1.0"

  • 확장 가능: 모든 태그가 사용자 정의됩니다.

  • 기능: 데이터 저장

    • 구성 파일

    • 데이터 전송

  • html과 html의 차이점 xml

    • HTML 구문은 느슨하고 xml 구문은 엄격함

    • html은 페이지 표시에 사용되고 xml은 데이터 저장에 사용됩니다.

    • Html 모든 태그는 사전 정의되고 xml 모든 태그는 사용자 정의됩니다.

2. xml 구문:

  • 문서 선언

    • 버전 버전 번호 고정 값 1.0

    • 인코딩 지정 문서 코드 테이블의 기본값 iso-8859-1

    • 문서가 독립형인지 여부를 지정합니다.

    • 은 xml 문서에 작성해야 합니다. 한 줄

    • 은 다음과 같이 작성됩니다. 41d1bdbe64b863f2b16c14c0adc44b32

    • 속성

    요소 xml 문서의
  • 태그

    • 요소 이름은 대소문자를 구분합니다

    • 숫자는 다음으로 시작할 수 없습니다.

    • 문서에는 루트 요소가 하나만 있어야 하며 하나만 있을 수 있습니다.

    • 요소를 올바르게 닫아야 합니다6c04bd5ca3fcae76e30b72ad730ca86ddbf4a1b9d12965251b02d12dd197d73e 076402276aae5dbec7f672f8f4e5cc81

    • 요소는 올바르게 중첩되어야 합니다.

    • 요소 이름은

  • 텍스트

    • 06c9720bfa8d3b66a032c6d614e3b97a

    • 이스케이프 문자>

    • CDATA의 데이터는 그대로 표시됩니다

  • 속성

    • 속성 값은 작은따옴표와 큰따옴표 모두 괜찮습니다.

  • 댓글

    • 19791207a4e0a22c816ac020ecd8cae0

  • 처리 지침: 기본적으로 지금은 필요하지 않습니다

    • 1440df80d4619c84bac1383592655cd1

3. XML 제약

  • 제약조건은 xml의 작성 규칙입니다

  • 제약조건 분류:

    • xsd 제약 문서 가져오기

    • 루트 태그 쓰기

    • 인스턴스 네임스페이스 소개 xmlns:xsi="www.w3.org/2001/XMLSchema-instance"

    • 네임스페이스 xsi:schemaLocation="www.itcast.cn/ xml Student.xsd" 소개

    • 기본 네임스페이스 소개

    • Student.xsd

    • student .xml

    • <?xml version="1.0"?>
      <xsd:schema xmlns="www.itheima.cn/xml"
              xmlns:xsd="www.w3.org/2001/XMLSchema"
              targetNamespace="www.itheima.cn/xml" elementFormDefault="qualified">
          <xsd:element name="students" type="studentsType"/>
          <xsd:complexType name="studentsType">
              <xsd:sequence>
                  <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
              </xsd:sequence>
          </xsd:complexType>
          <xsd:complexType name="studentType">
              <xsd:sequence>
                  <xsd:element name="name" type="xsd:string"/>
                  <xsd:element name="age" type="ageType" />
                  <xsd:element name="sex" type="sexType" />
              </xsd:sequence>
              <xsd:attribute name="number" type="numberType" use="required"/>
          </xsd:complexType>
          <xsd:simpleType name="sexType">
              <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="male"/>
                  <xsd:enumeration value="female"/>
              </xsd:restriction>
          </xsd:simpleType>
          <xsd:simpleType name="ageType">
              <xsd:restriction base="xsd:integer">
                  <xsd:minInclusive value="0"/>
                  <xsd:maxInclusive value="256"/>
              </xsd:restriction>
          </xsd:simpleType>
          <xsd:simpleType name="numberType">
              <xsd:restriction base="xsd:string">
                  <xsd:pattern value="itheima_\d{4}"/>
              </xsd:restriction>
          </xsd:simpleType>
      </xsd:schema>
      <?xml version="1.0" encoding="UTF-8" ?>
    • 09baa0eedea5a865edb873aee583a86e
    • <students
          xmlns="www.itheima.cn/xml"
          xsi:schemaLocation="www.itheima.cn/xml student.xsd"
          xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
      >
          <student number="itheima_1001">
              <name>asfd</name>
              <age>12</age>
              <sex>male</sex>
          </student>
      </students>
      <students
          xmlns:itheima="www.itheima.cn/xml"
          xsi:schemaLocation="www.itheima.cn/xml student.xsd"
          xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
      >
          <itheima:student number="itheima_1001">
              <itheima:name>asfd</itheima:name>
              <itheima:age>12</itheima:age>
              <theima:sex>male</itheima:sex>
          </itheima:student>
      </itheima:students>
    • 내부 dtd xml 내부에 dtd 정의
    • 외부 dtd는 외부 파일에 dtd를 정의합니다
    • Student.dtd
    • student.xml
    • 로컬 dtd 파일f69512afa2db5fd49f9ec2989f74eb22
    • 네트워크 dtd 파일dcda3234626b49dffa869df64a1ede38
    • <!ELEMENT students (student*) >
      <!ELEMENT student (name,age,sex)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT sex (#PCDATA)>
      <!ATTLIST student number ID #REQUIRED> 唯一的,必须的
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE students SYSTEM  "student.dtd">
      <students>
          <student number="s0001" >
              <name>zs</name>
              <age>abc</age>
              <sex>yao</sex>
          </student>
      </students>
    • dtd는 엄격하게 제한되지 않습니다
    • 스키마
    4. 🎜>

XML 구문 분석이 가능합니다:
  • xml이 구성 파일로 사용되는 경우: 읽기
    • xml을 전송 파일로 사용하는 경우: 쓰기, 읽기
    • XML 구문 분석 아이디어:
  • 장점: 없음 메모리, 빠른 속도
    • 단점: 읽기만 가능하고 다시 쓸 수 없음
    • 장점: 메모리에 DOM 트리가 형성되기 때문에, DOM 트리는 추가, 삭제, 수정, 확인이 가능합니다
    • 단점: DOM 트리는 메모리를 많이 차지하고 파싱 속도가 느립니다
    • 문서 요소 텍스트 속성 설명
    • DOM: 문서를 메모리에 로드하여 DOM 트리(문서 개체)를 형성하고 문서의 각 구성 요소를 일부 개체로 캡슐화합니다.
    • SAX: 한 줄씩 읽기, 이벤트 중심
    • xml 일반적으로 사용되는 파서
  • 규칙 정의
    • 사용 방법
    • 사용 단계
    • XPath:
    • public classTestXPath2 {
            @Test
            publicvoidtest()throwsException{
                  SAXReaderread= new SAXReader();
                  Documentdocument= read.read("src/Dom4jTest.xml");
                  Listnodes= document.selectNodes("/bookstore//book/title");
                  for(inti= 0;i< nodes.size();i++) {
                        Nodenode= (Node)nodes.get(i);
                        System.out.println(node.getText());
                  }
            }
      }

    • selectSingleNode()
    • selectNodes()
    • 참고: 가져오려면 패키지 jaxen...jar
    • 创建解析器 SAXReader reader = new SAXReader()

    • 解析xml 获得document对象 Document document = reader.read(url)

    •         //    nodename 选取此节点。

    •         //    /     从根节点选取。

    •         //    //     从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

    •         //    ..     选取当前节点的父节点。

    •         //    @     选取属性。

    •         //      [@属性名]    属性过滤

    •         //      [标签名]     子元素过滤

    •       @Test

            //遍历所有元素节点

    •  publicvoidtest2()throwsException{
                  //创建一个xml解析对象
                  SAXReaderreader= new SAXReader();
                  //把xml文档加载到document对象中
                  Documentdocument= reader.read("src/Book.xml");
                  Elementroot= document.getRootElement();
                  treeWalk(root);
            }
            
            privatevoidtreeWalk(Elementele){
                  //输出当前节点的名字
                  System.out.println(ele.getName());
                  //ele.nodeCount()得到当前节点的所有子节点的数量
                  for(inti= 0;i<ele.nodeCount();i++){
                        //取出下标为i的节点
                        Nodenode= ele.node(i);
                        //判断当前节点是否为标签
                        if(nodeinstanceofElement){
                              //把node强转为标签(Element)
                              treeWalk((Element)node);
                        }
                  }
            }
      }
    • public classTestDom4j {
            @Test
            publicvoidtest1()throwsException{
                  //创建一个xml解析对象
                  SAXReaderreader= new SAXReader();
                  //把xml文档加载到document对象中
                  Documentdocument= reader.read("src/Book.xml");
                  Elementroot= document.getRootElement();
      //          Element bookNode = root.element("书");
      //          System.out.println(bookNode.getName());
                  //得到当前节点所有的子节点
                  Listlist= root.elements();
                  //得到第二本书对象
                  ElementsecondBook= (Element)list.get(1);
                  //得到当前节点的文本内容
                  Stringname= secondBook.element("书名").getText();
                  System.out.println(name);
            }
    • 导入jar包 dom4j.jar

    • 创建解析器

    • 解析xml 获得document对象

    • SAXReader reader = new SAXReader()

    • Document document = reader.read(url)

    • JAXP sun公司提供的解析 支持dom和sax

    • JDOM

    • DOM4J dom for java民间方式,但是是事实方式,非常好,支持dom

    • 解析xml

    • XPATH 专门用于查询

위 내용은 XML에 대한 더 깊은 이해를 제공합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.