首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

对xml开展解析;进行增删改查还有schema验证

2012-10-25 
对xml进行解析;进行增删改查还有schema验证现在网络上的关于解析xml的资料很多,但是利用schema解析的不是

对xml进行解析;进行增删改查还有schema验证
现在网络上的关于解析xml的资料很多,但是利用schema解析的不是很多;所以我进行了下总结,包括xml的读取、分析、修改、查询。还有就是根据schema进行验证,当然,都是最基本的东西。
部分代码摘自:《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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TransformerException e) {// TODO Auto-generated catch blocke.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 blocke.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);}}

热点排行