- 浏览: 218704 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
flychao88:
nothingismao 写道623deyingxiong 写 ...
nio与io的比较 -
李冰冰:
如果NIO单个线程处理业务逻辑,那么如果这个业务逻辑非常耗时, ...
nio与io的比较 -
wj_126mail:
IO是一个连接就创建一个线程来处理;NIO是一个线程在处理所有 ...
nio与io的比较 -
nothingismao:
623deyingxiong 写道wwj85523 写道 看完 ...
nio与io的比较 -
623deyingxiong:
wwj85523 写道
看完后我迷糊了,
IO一样可以一个线 ...
nio与io的比较
现在网络上的关于解析xml的资料很多,但是利用schema解析的不是很多;所以我进行了下总结,包括xml的读取、分析、修改、查询。还有就是根据schema进行验证,当然,都是最基本的东西。
部分代码摘自:《core java volume2》,以及:http://blog.csdn.net/cds27/archive/2008/03/02/2139110.aspx
言语无用,直接上代码。
部分代码摘自:《core java volume2》,以及:http://blog.csdn.net/cds27/archive/2008/03/02/2139110.aspx
言语无用,直接上代码。
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="STUDENTS" type="students-type" /> <xs:complexType name="students-type"> <xs:sequence maxOccurs="unbounded"> <xs:element name="STUDENT" type="student-type" /> </xs:sequence> </xs:complexType> <xs:complexType name="student-type"> <xs:sequence> <xs:element name="PASSWORD" type="xs:string" /> <xs:element name="FIRST_NAME" type="xs:string" /> <xs:element name="LAST_NAME" type="xs:string" /> <xs:element name="MAJOR_NUMBER" type="xs:integer" /> <xs:any minOccurs="0" /> </xs:sequence> <xs:attribute name="STUDENT_ID" type="xs:integer" use="required"/> </xs:complexType> </xs:schema>
<?xml version="1.0" encoding="UTF-8"?> <STUDENTS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd"> <STUDENT STUDENT_ID="1"> <PASSWORD>19841230</PASSWORD> <FIRST_NAME>Xiangzhong</FIRST_NAME> <LAST_NAME>Chang</LAST_NAME> <MAJOR_NUMBER>7</MAJOR_NUMBER> </STUDENT> <STUDENT STUDENT_ID="2"> <PASSWORD>19841230</PASSWORD> <FIRST_NAME>Miao</FIRST_NAME> <LAST_NAME>Wu</LAST_NAME> <MAJOR_NUMBER>7</MAJOR_NUMBER> </STUDENT> <STUDENT STUDENT_ID="3"> <PASSWORD>19841230</PASSWORD> <FIRST_NAME>Juntai</FIRST_NAME> <LAST_NAME>Wang</LAST_NAME> <MAJOR_NUMBER>7</MAJOR_NUMBER> </STUDENT> </STUDENTS>
package com.cxz.xml.dom; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; public class DomParser { private static final int FLAG_TRACE = 1; private static final int FLAG_INSERT = 2; private static final int FLAG_DELETE = 3; private static final int FLAG_UPDATE = 4; private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; private static String W3C_XML_SCHEMA = "http://www.w3c.org/2001/XMLSchema"; private static String W3C_APACHE = "http://apache.org/xml/features/validation/schema"; File xmlFile = new File("xml/freshman.xml"); DocumentBuilderFactory xmlfactory = null; DocumentBuilder builder = null; Document document = null; Element root = null; public DomParser() throws ParserConfigurationException, SAXException, IOException { xmlfactory = DocumentBuilderFactory.newInstance(); xmlfactory.setValidating(true); xmlfactory.setNamespaceAware(true); xmlfactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); xmlfactory.setFeature(W3C_APACHE, true); xmlfactory.setIgnoringElementContentWhitespace(true); builder = xmlfactory.newDocumentBuilder(); builder.setErrorHandler(new MyXmlErrorHandler()); builder = xmlfactory.newDocumentBuilder(); document = builder.parse(xmlFile); root = document.getDocumentElement(); removeWhilespace(root); } private void doSth(int flag) { switch (flag) { case FLAG_TRACE: traceDomTree(); break; case FLAG_INSERT: insertOneNode(); break; case FLAG_DELETE: deleteOneNode(); break; case FLAG_UPDATE: updateOneNode(); break; } } private void traceDomTree() {//遍历 NodeList children = root.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Element child = (Element) children.item(i); Element element = (Element) child.getFirstChild(); while (element.getNextSibling() != null) { System.out.println(element.getTextContent()); element = (Element) element.getNextSibling(); } System.out.println(element.getTextContent()); } } private void insertOneNode() { Element theStudent = document.createElement("STUDENT"); theStudent.setAttribute("STUDENT_ID", "2003710201"); Element theElement = document.createElement("PASSWORD"); theElement.setTextContent("[137Joanna]"); theStudent.appendChild(theElement); theElement = document.createElement("FIRST_NAME"); theElement.setTextContent("Chang"); theStudent.appendChild(theElement); theElement = document.createElement("LAST_NAME"); theElement.setTextContent("Xiangzhong"); theStudent.appendChild(theElement); theElement = document.createElement("MAJOR_NUMBER"); theElement.setTextContent("1"); theStudent.appendChild(theElement); root.appendChild(theStudent); try { xml2File(root); validate(root); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void deleteOneNode() { Element theStudent = (Element) selectSingleNode( "/STUDENTS/STUDENT[@STUDENT_ID='3']", root); output(theStudent.getParentNode()); Node root = theStudent.getParentNode(); root.removeChild(theStudent); output(root); } private void updateOneNode() { Element theStudent = (Element) selectSingleNode( "/STUDENTS/STUDENT[FIRST_NAME='Miao']", root); output(theStudent.getParentNode()); theStudent.getElementsByTagName("MAJOR_NUMBER").item(0).setTextContent( "99999999999999999999"); output(theStudent.getParentNode()); } private Node selectSingleNode(String expression, Object source) { XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); Node result = null; try { result = (Node) xPath.evaluate(expression, source, XPathConstants.NODE); } catch (XPathExpressionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } public static NodeList selectNodes(String express, Object source) { NodeList result = null; XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); try { result = (NodeList) xpath.evaluate(express, source, XPathConstants.NODESET); } catch (XPathExpressionException e) { e.printStackTrace(); } return result; } private void xml2File(Node node) throws IOException, TransformerException { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformar = tFactory.newTransformer(); File file = new File("xml/dest.xml"); file.createNewFile(); Source source = new DOMSource(node); FileOutputStream out = new FileOutputStream(file); transformar.transform(source, new StreamResult(out)); } private void validate(Node node) throws SAXException, IOException { SchemaFactory schemaFactory = SchemaFactory .newInstance("http://www.w3.org/2001/XMLSchema"); File xsdFile = new File("xml/students.xsd"); Schema schema = schemaFactory.newSchema(xsdFile); Validator validator = schema.newValidator(); Source source = new DOMSource(node); Result result = new DOMResult(); validator.validate(source, result); } private int removeWhilespace(Element element) { int count = 0; NodeList children = element.getChildNodes(); if (children.getLength() <= 1) { return 0; } else { for (int i = children.getLength() - 1; i >= 0; i--) { Node child = children.item(i); if (child instanceof Text && ((Text) child).getData().trim().length() == 0) { element.removeChild(child); count++; } else if (child instanceof Element) { count += removeWhilespace((Element) child); } } } return count; } public static void output(Node node) { TransformerFactory transFactory = TransformerFactory.newInstance(); try { Transformer transformer = transFactory.newTransformer(); transformer.setOutputProperty("indent", "yes"); DOMSource source = new DOMSource(); source.setNode(node); StreamResult result = new StreamResult(); result.setOutputStream(System.out); transformer.transform(source, result); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { DomParser parser = new DomParser(); parser.doSth(FLAG_TRACE); parser.doSth(FLAG_INSERT); parser.doSth(FLAG_DELETE); parser.doSth(FLAG_UPDATE); } }
- xml.jar (6.1 KB)
- 下载次数: 75
- Research.rar (17.4 KB)
- 描述: xml验证,以及动态部署的例子
- 下载次数: 82
发表评论
-
ant build.xml例子
2010-01-10 20:16 2512<?xml version="1.0" ... -
避免内存泄露专题
2009-12-17 16:19 1237For Java: 1.限制使用单例模式;单例模式是引发mem ... -
万恶的inner class, memory leak的源头之一
2009-12-17 15:35 1327非static inner class隐式的含有一个引用指向o ... -
resolve maven [Request to merge when 'filtering' is not identical]. issue
2009-11-06 11:18 2711mvn org.apache.maven.plugins:ma ... -
an example of cloneable
2009-10-10 09:43 1081The following code describes ho ... -
jvm 远程debug
2009-04-17 10:01 1150-Xdebug -Xrunjdwp:transport=dt_ ... -
java dynamic proxy
2008-11-21 20:45 1134package proxy.cxz.org; impor ... -
serializable例子一则
2008-11-15 21:13 1056实现Serializable接口,编写地定义的针对transi ... -
jmx添加naming service以及一个rmi 监听方式
2008-11-11 15:22 2634ObjectName namingName = new ... -
指定编码器、解码器,并且利用ByteBuffer读写文件
2008-11-04 20:48 2689指定编码器、解码器,并且利用ByteBuffer读写文件。 做 ... -
java 网络编程探讨
2008-11-02 19:30 2097毕业有一年多了,大学的时候上过网络课程,但我一直认为:网络技术 ... -
Differences Between notify() and notifyAll()
2008-08-08 21:20 1052package com.cxz.currency.test; ... -
一套基于http的聊天c/s结构工具(除了网页tomcat还能做什么)
2008-08-08 11:51 4050在我的认识当中以前一直有一种误区认为:tomcat=web。在 ... -
jdk1.6中添加的future
2008-07-18 13:59 1329摘自:http://caterpillar.onlyfun.n ... -
模拟jdk1.5中reentrantlock
2008-07-18 13:15 1199选自:java线程2e。 类似于jdk1.5中的reentra ... -
java线程2e中写得相当花哨的thread例子!
2008-07-14 16:53 1785太鲜灵儿了! package com.cxz.tools; ... -
j2se中实现jndi的控制、管理
2008-07-01 19:34 1173jndi例子一则,转载自网络。利用一个container实现了 ... -
jmx控制tomcat
2008-07-01 09:22 5050以前所作的一切应用程序基本上都是由tomcat容器,控制web ... -
jmx例子一则
2008-06-30 07:32 2895很简单的一个hellojmx的例子。其中实现了:标准bean、 ... -
nio与io的比较
2008-06-21 17:31 14949nio是new io的简称,从jdk1.4就被引入了。现在的j ...
相关推荐
在这个“对XML进行增删改查例子”中,我们将探讨如何操作XML文档,包括添加新节点、删除已有节点、修改现有节点内容以及查询XML结构中的特定信息。 1. **XML的基本结构** XML文档由一系列元素组成,每个元素都有一...
以下是对XML数据进行增删改查操作的详细说明: 1. **创建XML文档** 创建XML文档首先需要遵循XML的语法规则,例如声明文档类型、定义元素、属性等。一个基本的XML文档结构如下: ```xml <?xml version="1.0" ...
"XML增删改查"是指在XML文档中进行添加、删除、修改和查询数据的基本操作,这些操作是理解和应用XML的关键技能。 1. **XML文档结构** - **文档声明**: XML文档以`<?xml version="1.0" encoding="UTF-8"?>`开始,...
它可以进行XML的增删改查操作,支持XML节点的拖放操作,以及XML文档的格式化,使代码更加整洁。此外,它还具备查找和替换功能,帮助用户快速定位并修改XML文档中的特定内容。 对于XML的复杂性,如XPath(XML Path ...
3. **XML解析器**:了解如何使用DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析器来处理XML文档。DOM将整个XML文档加载到内存中形成一棵树,便于遍历和修改;SAX是...
3. `IXMLDOMElement`和`IXMLDOMAttribute`接口的使用,包括元素和属性的增删改查。 4. XML Schema验证以确保数据的正确性。 通过学习这个实例,开发者能够掌握PowerBuilder中处理XML的基本技巧,进一步提升其在应用...
5. 实际应用:可能需要模拟一个实际场景,如创建一个XML数据文件,然后使用XML技术进行处理,例如数据的增删改查操作。 6. 数据绑定:理解如何将XML数据与应用程序中的对象模型绑定,实现数据的动态更新和展示。 在...
在实际应用中,这两个类可能提供了一些方便的抽象方法,比如读取XML配置文件、序列化和反序列化XML数据、以及对XML数据的增删改查操作。为了提高代码的可读性和可维护性,这些类可能会遵循一定的设计模式,如工厂...
XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在本“XML大作业”中,...通过这样的作业,学生能够深入理解XML的使用,并能熟练地进行数据的增删改查操作。
4. 增删改查操作:添加新学生、删除学生、更新学生信息等。 5. 输出展示:将查询结果以友好的方式显示给用户,可能是表格或者简单的文本列表。 开发这样的系统,我们需要了解XML的基本语法,如元素、属性、命名空间...
5. **处理数据**:在组件内部,你需要处理JSON数据的增删改查,并同步到UI上。 6. **样式定制**:根据需求,可以使用CSS预处理器(如Sass或Less)对生成的UI进行样式定制。 7. **交互逻辑**:添加事件监听器以响应...
6. **实践项目**:通过实际项目,让学生运用所学知识解决实际问题,如创建XML文件,编写解析XML的程序,实现XML数据的增删改查操作等。 7. **XML相关工具**:介绍XML编辑器、验证工具,如XML Spy,以及调试工具,...
- DOM模型允许整个XML文档加载到内存中,方便进行增删改查操作,但不适合大型XML文件,因为它会占用大量内存。 11. **SAX解析器**: - 作为轻量级的解析方式,SAX不将整个XML文档加载到内存,而是通过事件驱动的...
章节可能涉及DOM树的构建、节点遍历、元素和属性的增删改查等。 3. **SAX解析**:SAX是一种事件驱动的解析方式,适用于处理大型XML文档。本章可能会介绍如何使用SAX解析器进行逐事件处理,以及事件处理类的编写。 ...