我想将XML文档转换为java-tree-structure,但我不知道什么是java-tree-structure?例如,JTree还是其他?是否存在任何图书馆?
答案 0 :(得分:4)
您可以使用以Java表示的XML DOM树。 XML解析器会立即将它提供给您。
答案 1 :(得分:4)
如果您的XML符合特定模式(并且您有一个XSD文件),则可以使用JAXB将XSD转换为一堆Java类,以便于操作数据。
答案 2 :(得分:3)
您可以使用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));
}
}
}