JavaWeb学习笔记——Schema

Schema

schema约束

schema符合xml的语法,xml语句

一个xml中可以有多个schema,多个schema使用名称空间区分(类似于java包名)

dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型

                      schema可以直接定义一个整数类型

schema语法更加复杂,schema目前不能替代dtd

快速入门

xmlns="http://www.w3.org/2001/XMLSchema"   约束文件

targetNamespace="http://www.example.org/1" 引入约束文件是使用这个地址url地址

xmlns:tns="http://www.example.org/1"

elementFormDefault="qualified"

判断简单元素还是复杂元素<complexType><sequence>

子元素<element name="name" type="string"></element>

被约束文件

在根节点里面xmls:xsi="...-instance"

xmlsn="targetNamespace"

schemaLocation="targetNamespace 路径地址"

<sequence>表示元素出现的顺序

<all>表示元素只能出现一次

<choice>只能出现其中一个

maxOccurs=“unbounded”  表示元素出现的次数

<any></any>表示任意元素

可以约束属性

写在复杂元素里面

写在</complexType>之前

<attribute name="id1" type="int" use="required"></attribute>

sax解析的原理

自动执行事件

starteElement

characters

endElement

package cn.itcast.personTest;

import java.io.IOException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxP1Test01 {
	public static void main(String[] args) throws Exception {
		SAXParserFactory saxparderfactory = SAXParserFactory.newInstance();
		SAXParser saxparser = saxparderfactory.newSAXParser();
		saxparser.parse("src/p1.xml", new MyDefault());
	}

}

class MyDefault extends DefaultHandler {
	boolean flag = false;
	int index = 0;

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if ("name".equals(qName) && index == 0) {
			flag = true;
		}
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (flag) {
			System.out.println(new String(ch, start, length));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (flag) {
			flag = false;
			index++;
		}
	}

}

class MyClass1 extends DefaultHandler {

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		System.out.print("<" + qName + ">");
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		System.out.print(new String(ch, start, length));
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		System.out.print("</" + qName + ">");
	}

}

dom4j

不是javase的一部分

package cn.itcast.dom4j.test;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4jTest01 {
	public static void main(String[] args) throws Exception {
		showSecond();
	}

	public static void showSecond() throws Exception {
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read("src/p1.xml");
		Element root = document.getRootElement();
		List<Element> p1 = root.elements("p1");
		Element pp = p1.get(1);
		Element name1 = pp.element("name");
		String s = name1.getText();
		System.out.println(s);
	}
}

分析:

1、创建解析器SAXReader

2、对xml文件read()解析后产生一个document

3、将文件解析后通过getRootElement()得到根节点

4、根据根节点通过elements()得到标签数组

5、通过数组下标get()方法得到第二个标签的element

6、再根据element()得到这个标签下的第一个name标签的element

7、最后getText()得到文本内容

猜你喜欢

转载自blog.csdn.net/TangXiaoPang/article/details/86659594