Java/XML/StAX

Материал из Java эксперт
Перейти к: навигация, поиск

Create a StAX Event Tree Viewer

   <source lang="java">
 

import java.awt.BorderLayout; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Iterator; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.Characters; import javax.xml.stream.events.DTD; import javax.xml.stream.events.StartDocument; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; public class StAXEventTreeViewer extends JFrame {

 DefaultMutableTreeNode base = new DefaultMutableTreeNode("XML File");
 DefaultTreeModel defaultTreeModel= new DefaultTreeModel(base);
 private JTree jTree= new JTree(defaultTreeModel);
 public StAXEventTreeViewer()throws XMLStreamException, FileNotFoundException {
   setSize(800, 650);
   buildTree(defaultTreeModel, base, new File("yourXML.xml"));
   getContentPane().add(new JScrollPane(jTree), BorderLayout.CENTER);
   setVisible(true);
 }
 public static void main(String[] args) throws Exception {
   new StAXEventTreeViewer();
 }
 public void buildTree(DefaultTreeModel treeModel, DefaultMutableTreeNode current, File file)
     throws XMLStreamException, FileNotFoundException {
   XMLInputFactory inputFactory = XMLInputFactory.newInstance();
   XMLEventReader reader = inputFactory.createXMLEventReader(new FileInputStream(file));
   while (reader.hasNext()) {
     XMLEvent event = reader.nextEvent();
     switch (event.getEventType()) {
     case XMLStreamConstants.START_DOCUMENT:
       StartDocument startDocument = (StartDocument) event;
       DefaultMutableTreeNode version = new DefaultMutableTreeNode(startDocument.getVersion());
       current.add(version);
       current.add(new DefaultMutableTreeNode(startDocument.isStandalone()));
       current.add(new DefaultMutableTreeNode(startDocument.standaloneSet()));
       current.add(new DefaultMutableTreeNode(startDocument.encodingSet()));
       current.add(new DefaultMutableTreeNode(startDocument.getCharacterEncodingScheme()));
       break;
     case XMLStreamConstants.START_ELEMENT:
       StartElement startElement = (StartElement) event;
       QName elementName = startElement.getName();
       DefaultMutableTreeNode element = new DefaultMutableTreeNode(elementName.getLocalPart());
       current.add(element);
       current = element;
       if (!elementName.getNamespaceURI().equals("")) {
         String prefix = elementName.getPrefix();
         if (prefix.equals("")) {
           prefix = "[None]";
         }
         DefaultMutableTreeNode namespace = new DefaultMutableTreeNode("prefix="
             + prefix + ",URI=" + elementName.getNamespaceURI());
         current.add(namespace);
       }
       for (Iterator it = startElement.getAttributes(); it.hasNext();) {
         Attribute attr = (Attribute) it.next();
         DefaultMutableTreeNode attribute = new DefaultMutableTreeNode("Attribute (name="
             + attr.getName().getLocalPart() + ",value=" + attr.getValue() + "")");
         String attURI = attr.getName().getNamespaceURI();
         if (!attURI.equals("")) {
           String attPrefix = attr.getName().getPrefix();
           if (attPrefix.equals("")) {
             attPrefix = "[None]";
           }
           attribute.add(new DefaultMutableTreeNode("prefix = " + attPrefix + ", URI = " + attURI));
         }
         current.add(attribute);
       }
       break;
     case XMLStreamConstants.END_ELEMENT:
       current = (DefaultMutableTreeNode) current.getParent();
       break;
     case XMLStreamConstants.CHARACTERS:
       Characters characters = (Characters) event;
       if (!characters.isIgnorableWhiteSpace() && !characters.isWhiteSpace()) {
         String data = characters.getData();
         if (data.length() != 0) {
           current.add(new DefaultMutableTreeNode(characters.getData()));
         }
       }
       break;
     case XMLStreamConstants.DTD:
       DTD dtde = (DTD) event;
       current.add(new DefaultMutableTreeNode(dtde.getDocumentTypeDeclaration()));
     default:
       System.out.println(event.getClass().getName());
     }
   }
 }

}

 </source>
   
  
 
  



Load XML document to a tree with XML stream reader

   <source lang="java">
 

import java.awt.BorderLayout; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; public class StAXStreamTreeViewer extends JFrame {

 private JTree jTree;
 DefaultTreeModel defaultTreeModel;
 public StAXStreamTreeViewer()throws Exception {
   StAXStreamTreeViewer viewer = new StAXStreamTreeViewer();
   File file = new File("yourXML.xml");
   DefaultMutableTreeNode base = new DefaultMutableTreeNode("XML Document: "
       + file.getAbsolutePath());
   defaultTreeModel = new DefaultTreeModel(base);
   jTree = new JTree(defaultTreeModel);
   buildTree(defaultTreeModel, base, file);
   getContentPane().add(new JScrollPane(jTree), BorderLayout.CENTER);
   viewer.setVisible(true);
   setSize(800, 450);
 }
 public static void main(String[] args)throws Exception {
   new StAXStreamTreeViewer();
 }
 public void buildTree(DefaultTreeModel treeModel, DefaultMutableTreeNode current, File file)
     throws XMLStreamException, FileNotFoundException {
   FileInputStream inputStream = new FileInputStream(file);
   XMLInputFactory inputFactory = XMLInputFactory.newInstance();
   XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream);
   addStartDocumentNodes(reader, current);
   parseRestOfDocument(reader, current);
 }
 private void addStartDocumentNodes(XMLStreamReader reader, DefaultMutableTreeNode current) {
   DefaultMutableTreeNode version = new DefaultMutableTreeNode(reader.getVersion());
   current.add(version);
   DefaultMutableTreeNode standalone = new DefaultMutableTreeNode(reader.isStandalone());
   current.add(standalone);
   DefaultMutableTreeNode standaloneSet = new DefaultMutableTreeNode(reader.standaloneSet());
   current.add(standaloneSet);
   DefaultMutableTreeNode encoding = new DefaultMutableTreeNode(reader.getEncoding());
   current.add(encoding);
   DefaultMutableTreeNode declaredEncoding = new DefaultMutableTreeNode(reader.getCharacterEncodingScheme());
   current.add(declaredEncoding);
 }
 private void parseRestOfDocument(XMLStreamReader reader, DefaultMutableTreeNode current)
     throws XMLStreamException {
   while (reader.hasNext()) {
     int type = reader.next();
     switch (type) {
     case XMLStreamConstants.START_ELEMENT:
       DefaultMutableTreeNode element = new DefaultMutableTreeNode(reader.getLocalName());
       current.add(element);
       current = element;
       if (reader.getNamespaceURI() != null) {
         String prefix = reader.getPrefix();
         if (prefix == null) {
           prefix = "[None]";
         }
         DefaultMutableTreeNode namespace = new DefaultMutableTreeNode("prefix = ""
             + prefix + "", URI = "" + reader.getNamespaceURI() + """);
         current.add(namespace);
       }
       if (reader.getAttributeCount() > 0) {
         for (int i = 0; i < reader.getAttributeCount(); i++) {
           DefaultMutableTreeNode attribute = new DefaultMutableTreeNode("Attribute (name = ""
               + reader.getAttributeLocalName(i) + "", value = "" + reader.getAttributeValue(i)
               + "")");
           String attURI = reader.getAttributeNamespace(i);
           if (attURI != null) {
             String attPrefix = reader.getAttributePrefix(i);
             if (attPrefix == null || attPrefix.equals("")) {
               attPrefix = "[None]";
             }
             DefaultMutableTreeNode attNamespace = new DefaultMutableTreeNode(
                 "prefix=" + attPrefix + ",URI=" + attURI);
             attribute.add(attNamespace);
           }
           current.add(attribute);
         }
       }
       break;
     case XMLStreamConstants.END_ELEMENT:
       current = (DefaultMutableTreeNode) current.getParent();
       break;
     case XMLStreamConstants.CHARACTERS:
       if (!reader.isWhiteSpace()) {
         DefaultMutableTreeNode data = new DefaultMutableTreeNode("CD:"
             + reader.getText());
         current.add(data);
       }
       break;
     case XMLStreamConstants.DTD:
       DefaultMutableTreeNode dtd = new DefaultMutableTreeNode("DTD:" + reader.getText());
       current.add(dtd);
       break;
     case XMLStreamConstants.SPACE:
       break;
     case XMLStreamConstants.ruMENT:
       DefaultMutableTreeNode comment = new DefaultMutableTreeNode(reader.getText());
       current.add(comment);
       break;
     default:
       System.out.println(type);
     }
   }
 }

}

 </source>
   
  
 
  



Validate Stax

   <source lang="java">

/*

* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
* 
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
* 
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License").  You
* may not use this file except in compliance with the License. You can obtain
* a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
* or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
* language governing permissions and limitations under the License.
* 
* When distributing the software, include this License Header Notice in each
* file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
* Sun designates this particular file as subject to the "Classpath" exception
* as provided by Sun in the GPL Version 2 section of the License file that
* accompanied this code.  If applicable, add the following below the License
* Header, with the fields enclosed by brackets [] replaced by your own
* identifying information: "Portions Copyrighted [year]
* [name of copyright owner]"
* 
* Contributor(s):
* 
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license."  If you don"t indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above.  However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/

/*

* Validate.java
*
* Created on May 28, 2005, 3:02 PM
*/

import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import javax.xml.XMLConstants; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLOutputFactory; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; /**

* 
* @author pv156767
*/

public class ValidateStax {

 /**
  * @param args
  *          the command line arguments
  */
 public static void main(String[] args) {
   try {
     // TODO code application logic here
     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
     System.out.println("schema factory instance obtained is " + sf);
     Schema schema = sf.newSchema(new File(args[0]));
     System.out.println("schema obtained is = " + schema);
     // Get a Validator which can be used to validate instance document against
     // this grammar.
     Validator validator = schema.newValidator();
     // Validate this instance document against the Instance document supplied
     String fileName = args[1].toString();
     String fileName2 = args[2].toString();
     javax.xml.transform.Result xmlResult = new javax.xml.transform.stax.StAXResult(
         XMLOutputFactory.newInstance().createXMLStreamWriter(new FileWriter(fileName2)));
     javax.xml.transform.Source xmlSource = new javax.xml.transform.stax.StAXSource(
         getXMLEventReader(fileName));
     // validator.validate(new StreamSource(args[1]));
     validator.validate(xmlSource, xmlResult);
   } catch (Exception ex) {
     ex.printStackTrace();
     System.out.println("GET CAUSE");
     ex.getCause().fillInStackTrace();
   }
 }
 private static XMLEventReader getXMLEventReader(String filename) {
   XMLInputFactory xmlif = null;
   XMLEventReader xmlr = null;
   try {
     xmlif = XMLInputFactory.newInstance();
     xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.TRUE);
     xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
     xmlif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE);
     xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
     FileInputStream fis = new FileInputStream(filename);
     xmlr = xmlif.createXMLEventReader(filename, fis);
   } catch (Exception ex) {
     ex.printStackTrace();
   }
   return xmlr;
 }

}

 </source>