1

我正在尝试解析 xsd 文件并使用它的层次结构创建一个字符串树。我阅读了以下问题: Parsing XSD and getting nested elementsJava API to parse XSD schema file。但是,我还是不明白。我写了以下代码:

public class Tree {
    public String Data;
    private Tree Parent;
    private ArrayList<Tree> Children;

    public Tree(String data) {
        Data = data;
        Parent = null;
        Children = new ArrayList<Tree>();
    }

    public Tree AddChild(String data){
        Tree child = new Tree(data);
        child.Parent = this;
        Children.add(child);
        return child;
    }

    public ArrayList<Tree> Children(){
        return Children;
    }

    public Tree Parent(){
        return Parent;
    }

    public static Tree MakeTreeFromXsd(String xsdPath) 
            throws ClassNotFoundException, InstantiationException, 
            IllegalAccessException, ClassCastException{

        System.setProperty(DOMImplementationRegistry.PROPERTY, 
                "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl");

        DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();

        com.sun.org.apache.xerces.internal.xs.XSImplementation impl = 
                (com.sun.org.apache.xerces.internal.xs.XSImplementation) 
                registry.getDOMImplementation("XS-Loader");

        XSLoader schemaLoader = impl.createXSLoader(null);
        XSModel model = schemaLoader.loadURI(xsdPath);
        XSNamedMap map = model.getComponents(XSConstants.ELEMENT_DECLARATION);
        Tree t = new Tree("root");
        for (int j=0; j<map.getLength(); j++) {
            XSObject o = map.item(j);
            t.AddChild(o.getName());
        }
        return t;
    }
}

如何改进函数 MakeTreeFromXsd 以返回具有 xsd 的所有层次结构的树,而不仅仅是顶级组件?

4

0 回答 0