Java 将XSD解析为树结构

Java 将XSD解析为树结构,java,swing,tree,xsd,xsom,Java,Swing,Tree,Xsd,Xsom,下面是来自W3C学校(shiporder.xsd)的xml模式示例 参考: 我想用这个结果通过JTree构建一个树,这样它可以帮助我理解xml模式 我知道有些库和工具可以这样做 但是我想手动创建它(通过每个元素添加树节点),这样我就可以轻松地获得每个元素的信息并提供树视图 下面是coma 3.0(shiporder.xsd)的树视图示例 我知道如何在Jtree中添加节点 DefaultMutableTreeNode root = new DefaultMutableTreeNode("pack

下面是来自W3C学校(shiporder.xsd)的xml模式示例

参考:

我想用这个结果通过JTree构建一个树,这样它可以帮助我理解xml模式

我知道有些库和工具可以这样做

但是我想手动创建它(通过每个元素添加树节点),这样我就可以轻松地获得每个元素的信息并提供树视图

下面是coma 3.0(shiporder.xsd)的树视图示例

我知道如何在Jtree中添加节点

DefaultMutableTreeNode root = new DefaultMutableTreeNode("package");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("doc1");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("doc2");
root.add(node1);
root.add(node2);
DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("doc info");
node1.add(leafnode);
我已经尝试过JAXB(DOM)来做这项工作,但我认为JAXB主要是处理对象类

我的目的是计算xsd相似度,首先是得到结构相似度

我认为,如果我能得到树模式并知道每个元素的位置及其关系,那么计算结构相似性就很容易了

如何使用解析结果构造树

方法?思想

任何帮助都将不胜感激。

您可以使用(请参阅)获取XML模式的树表示形式,然后在树上构建树

您还可以使用将模式转换为Java,然后再使用对象

您说您想使用“手动”操作它来理解XML模式?也许你可以试着用or来写。您必须在读取每个节点时对其进行处理,并在读取时构建树表示

我可以向您展示一个JavaSAX示例。我会尽量使它适应你的问题,然后我会把它添加到这里


这里是:(这应该适用于您的示例,但不适用于任何其他XML模式;DOM将是一个更简单的替代方案,如果您认真对待处理模式,我建议您尝试JAXB)

谢谢您的建议!我尝试过JAXB来做这项工作,但我认为JAXB主要是处理对象类。我的目的是计算xsd相似性,首先是获得结构相似性。我认为,如果我能得到树模式并知道每个元素的位置及其关系,那么计算结构相似性就很容易了。我可以问一下在您的示例中名称空间导入了什么吗?我的IDE中出现了一些错误。对于一些sax类,您需要
org.xml.sax.*
javax.xml.parsers.*
以及
org.xml.sax.helpers.DefaultHandler
如何遵循引用?
//Parsing result
//It parsed the input schema in orders and parsed the content incide when the element
//is a complex type.After finish parsing one complex element and go on next element
Element Name : shiporder
Element Type : shipordertype complex type
Element Name : orderperson
Element Type : stringtype simple type
-------------------
Element Name : shipto
Element Type : shiptotype complex type
Element Name : name
Element Type : stringtype simple type
Element Name : address
Element Type : stringtype simple type
Element Name : city
Element Type : stringtype simple type
Element Name : country
Element Type : stringtype simple type
-------------------
Element Name : item
Element Type : itemtype complex type
Element Name : title
Element Type : stringtype simple type
Element Name : note
Element Type : stringtype simple type
Element Name : quantity
Element Type : inttype simple type
Element Name : price
Element Type : dectype simple type
-------------------
Attributes for CoplexType:shipordertype
Attribute Name:orderid
Attribute Type: orderidtype
DefaultMutableTreeNode root = new DefaultMutableTreeNode("package");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("doc1");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("doc2");
root.add(node1);
root.add(node2);
DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("doc info");
node1.add(leafnode);