验证XML文档
来源:互联网 发布:超级基因优化液txt全集下载 编辑:程序博客网 时间:2024/04/28 11:05
Element规则:指定某个元素拥有什么样的子元素。
<!ELEMENT menu (item)*> //声明menu元素包含0个或多个item元素
<!ELEMENT font (name,size)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT size (#PCDATA)> /*声明font是用name和size描述,它们都包含文本*/
描述一本书章节的规则
<!ELEMENT chapter (intro,(heading,(para|image|table|note)+)+)
每一章都以简介开头,其后一个或多个小结,每个小结由一个标题和一个或多个段落、图片、表格、说明构成
描述合法元素属性的规则ATTLIST
<!ATTLIST element attribute type default>
属性类型
CDATA 任意字符串
NMTOKEN(S) 一个或多个名字标记
ID 一个唯一ID
IDREF(S) 一个或多个对唯一ID的引用
ENTITY(S) 一个或多个未解析的实体
属性的默认值
#REQUIRED 必需
#IMPLIED 可选
A 可选,若未指定,则为A
#FIXED A 属性必需是未指定的或者A
如何配置解析器利用DTD
1)通知文档工厂打开验证特性
factory.setValidating(true);
2)指定不解析空白文本
factory.setIgnoringElementContentWhitespace(true);
3)指定错误处理器
builder.setErrorHandler(handler);
解析带有Schema的XML文件
1)必需打开对命名空间的支持。factory.setNamespaceAware(true);
2)准备处理Schema的工厂
final String JAXP_SCHEMA_LANGUAGE="http://java.sun.com/xml/jaxpproperties/schemaLanguage";final String W3C_XML_SCHEMA = "http://www.w2.org/2001/XMLSchema";factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
XPath定位信息
XPathFactory xpFactory = XPathFactory.newInstance();
path = xpFactory.newXPath();
String userName = path.evaluate("/configuration/database/username",doc);
注:/gridbag/row --> 描述了gridbag下面所有的row元素,可用[]来选择 、grid bag/row[1]
使用@操作符获取属性 --> 、gridbag/row[1]/cell[1]/@author
流机制解析器
1.SAX步骤
SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();parser.parse(source, handler);
2.StAX步骤
XMLInputFactory factory = XMLInputFactory.newInstance();XMLStreamReader parser = factory.createXMLStreamReader(in);while(parser.hasNext()){int event = parser.next();//....}
两种类型爬虫代码比较
public static void main(String[] args) throws Exception {String url;if (args.length == 0) {url = "http://w3c.org";System.out.println("Using URL: " + url);} else {url = args[0];}DefaultHandler handler = new DefaultHandler() {public void startElement(String namespaceURI, String lname,String qname, Attributes attrs) {if (lname.equals("a") && attrs != null) {for (int i = 0; i < attrs.getLength(); i++) {String aname = attrs.getLocalName(i);if (aname.equals("href")) {System.out.println(attrs.getValue(i));}}}}};SAXParserFactory factory = SAXParserFactory.newInstance();factory.setNamespaceAware(true); // 激活命名空间factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",false); // 不加载DTD文件头SAXParser saxParser = factory.newSAXParser();InputStream in = new URL(url).openStream();saxParser.parse(in, handler);}
public static void main(String[] args) throws Exception {String url;if (args.length == 0) {url = "http://www.w3c.org";System.out.println(url);} else {url = args[0];}URL urlString = new URL(url);InputStream is = urlString.openStream();XMLInputFactory factory = XMLInputFactory.newInstance();XMLStreamReader parser = factory.createXMLStreamReader(is);while (parser.hasNext()) {int event = parser.next();if (event == XMLStreamConstants.START_ELEMENT) {if (parser.getLocalName().equals("a")) {String href = parser.getAttributeValue(null, "href");if (href != null) {System.out.println(href);}}}}}
生成XML文档
1. 不带命名空间
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element root = doc.createElement("rootName");Element child = doc.createElement("childName");Text textNode = doc.createTextNode("123");doc.appendChild(root);root.appendChild(child);child.appendChild(textNode);
2.带命名空间
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setNamespaceAware(true);DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();String nameSpace = "http://www.w3.org/2000/svg";Element root = doc.createElementNS(nameSpace, "svg");Element svgElement = doc.createElementNS(nameSpace, "svg:svg");//上述代码转换为 <svg:svg xmlns:svg="http://www.w3.org/2000/svg">root.setAttributeNS(nameSpace, qualifiedName, value);
3.使用StAX
XMLOutputFactory factory = XMLOutputFactory.newInstance();XMLStreamWriter writer = factory.createXMLEventWriter(out);//生成文件头writer.writeStartDocument();//第一个元素writer.writeStartElement("name");//元素属性writer.writeAttribute("name", "value");//写出字符writer.writeCharacters("text");//元素结尾writer.writeEndElement();//文档结尾writer.writeEndDocument();
- XML文档实例验证
- 验证XML文档
- 用Schema验证XML文档
- 根据 XML 模式验证 XML 文档
- 根据 XML 模式验证 XML 文档
- 根据 XML 模式验证 XML 文档
- XML—— 验证XML文档
- 使用schema验证xml文档的合法性
- 设置和验证XML文档的数字签名
- 使用XmlReader验证XML文档的规范性
- Xml文档验证—基础篇
- java中使用schema验证xml文档
- SUMO文档016:XML文件验证
- strut2验证之XML声明式文档验证
- 高级 XML 验证-使用 XSLT 和 Java 扩展验证 XML 文档中的复杂约束
- JDOM操作XML文档高级篇XML验证,创建带名字空间的xml, xml文档的修改
- python对XML文档的良构性和有效性验证
- VB Script 如何使用XSD验证XML文档格式
- 速查表:常用算法和数据结构的复杂度
- Matlab的神奇问题again
- 黑马程序员-------c语言学习笔记之流程控制
- UML简单介绍(十八)——组件图的基本概念与实例解析
- 绘图,路径
- 验证XML文档
- CF 551 B 水题
- JSF页面间传值精辟总结
- 几种最短路径算法简介(一)
- C#关于json字符串解析的封装
- 程序员学习编程需要攻克的8个障碍
- 安卓坐标
- 1072: [SCOI2007]排列perm
- tail跟踪日志时打印时间