Как я могу преобразовать XML в Java-древовидную структуру? - PullRequest
2 голосов
/ 05 марта 2010

Я хотел бы преобразовать XML-документ в структуру Java-дерева, но я не знаю, что такое структура Java-дерева? Например, JTree или другое? существует ли какая-либо библиотека?

Ответы [ 3 ]

4 голосов
/ 05 марта 2010

Если ваш XML соответствует определенной схеме (и у вас есть файл XSD для нее), вы можете использовать JAXB для преобразования XSD в набор классов Java для удобного управления данными.

4 голосов
/ 05 марта 2010

Вы можете использовать дерево XML DOM, выраженное в Java. Синтаксический анализатор XML предоставит его вам сразу.

3 голосов
/ 05 марта 2010

Вы можете заполнить JTree конструкцией SAXTreeBuilder в import org.xml.sax. Что-то вроде (ПРИМЕЧАНИЕ: я не написал код ниже)

/*
  Java, XML, and Web Services Bible
  Mike Jasnowski
  ISBN: 0-7645-4847-6
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Event.*;
import java.io.*;
import javax.swing.tree.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.*;

public class XMLTreeView {

       private SAXTreeBuilder saxTree = null;
       private static String file = "";

       public static void main(String args[]){
              JFrame frame = new JFrame("XMLTreeView: [ games.xml ]");
              frame.setSize(400,400);

              frame.addWindowListener(new WindowAdapter(){
                   public void windowClosing(WindowEvent ev){
                       System.exit(0);
                   }
              });
              file = "games.xml";
              new XMLTreeView(frame);
       }

       public XMLTreeView(JFrame frame){ 
              frame.getContentPane().setLayout(new BorderLayout());  
              DefaultMutableTreeNode top = new DefaultMutableTreeNode(file);
//              DefaultMutableTreeNode top = new DefaultMutableTreeNode("XML Document"); 

              saxTree = new SAXTreeBuilder(top); 

              try {             
              SAXParser saxParser = new SAXParser();
              saxParser.setContentHandler(saxTree);
              saxParser.parse(new InputSource(new FileInputStream(file)));
              }catch(Exception ex){
                 top.add(new DefaultMutableTreeNode(ex.getMessage()));
              }
              JTree tree = new JTree(saxTree.getTree()); 
              JScrollPane scrollPane = new JScrollPane(tree);

              frame.getContentPane().add("Center",scrollPane);                                           
              frame.setVisible(true);       

        } 


}
class SAXTreeBuilder extends DefaultHandler{

       private DefaultMutableTreeNode currentNode = null;
       private DefaultMutableTreeNode previousNode = null;
       private DefaultMutableTreeNode rootNode = null;

       public SAXTreeBuilder(DefaultMutableTreeNode root){
              rootNode = root;
       }
       public void startDocument(){
              currentNode = rootNode;
       }
       public void endDocument(){
       }
       public void characters(char[] data,int start,int end){
              String str = new String(data,start,end);              
              if (!str.equals("") && Character.isLetter(str.charAt(0)))
                  currentNode.add(new DefaultMutableTreeNode(str));           
       }
       public void startElement(String uri,String qName,String lName,Attributes atts){
              previousNode = currentNode;
              currentNode = new DefaultMutableTreeNode(lName);
              // Add attributes as child nodes //
              attachAttributeList(currentNode,atts);
              previousNode.add(currentNode);              
       }
       public void endElement(String uri,String qName,String lName){
              if (currentNode.getUserObject().equals(lName))
                  currentNode = (DefaultMutableTreeNode)currentNode.getParent();              
       }
       public DefaultMutableTreeNode getTree(){
              return rootNode;
       }

       private void attachAttributeList(DefaultMutableTreeNode node,Attributes atts){
               for (int i=0;i<atts.getLength();i++){
                    String name = atts.getLocalName(i);
                    String value = atts.getValue(name);
                    node.add(new DefaultMutableTreeNode(name + " = " + value));
               }
       }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...