繁体   English   中英

Java中解析XML的有效方法

[英]Efficient way of parsing XML in Java

我必须解析具有以下结构的XML文件:

<root>
    <object_1>
        <pro1> abc </pro1>
        <pro2> pqr </pro2>
        <pro3> xyz </pro3>

        <children>
            <object_a>
                <pro1> abc </pro1>
                <pro2> pqr </pro2>
                <pro3> xyz </pro3>

                <children>
                    .
                    .
                    .
                </children>
            </object_a>
        </children>     
    </object_1>
    <object_2> 
    .
    . 
    .
    </object_n>
</root>

目的是解析此多层嵌套。 Java中定义了一些类。

Class Object_1
Class Object_2
.
.
.
Class Object_N

及其各自的属性。

以下代码对我有用,但这不是最好的处理方式。

File file = new File(fileName);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(file);
doc.getDocumentElement().normalize();

if(doc ==null) return;

Node node = doc.getFirstChild();

NodeList lst = node.getChildNodes();
Node children = null ; 

int len = lst.getLength();
for(int index=0;index<len;index++)
{
    Node child = lst.item(index);
    String name = child.getNodeName();
    if(name=="Name")
        name = child.getNodeValue();
    else if(name=="Comment")
        comment = child.getNodeValue());
    else if(name=="children")
        children = child;
    }

    if(children==null) return; 

    lst = children.getChildNodes();
    len = lst.getLength();
    Class<?> obj=null;
    AbsModel model = null;
    for(int index=0;index<len;index++)
    {
        Node childNode = lst.item(index);
        String modelName = childNode.getNodeName();
        try {
            obj = Class.forName(modelName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if(obj!=null)
            model = (AbsModel) obj.newInstance();
        else
            model = new GenericModel();

        model.restoreDefaultPropFromXML(childNode);
        addChild(model);
    }
}

有没有更好的方法来解析此XML。

考虑使用JAXB ,它是Java自版本6以来的一部分。您应该能够几乎没有代码地将XML文件解析(“解组”)到您自己的类中,只需添加一些注释即可明确说明对象结构与您的对象之间的映射。 XML结构。

StAX和/或JAXB几乎总是行之有效的方法。

如果XML确实是动态的(例如属性指定属性名称),即<prop name="property" value="" />那么您将仅需要使用StAX或使用JAXB映射到的内容(名称为POJO和值属性)和后期处理。

我个人认为结合StAX和JAXB是最好的。 我解析了所需的元素,然后使用JAXB将元素转换为POJO。

另请参阅

尽管JAXB可能是最佳选择,但我还要提到jOOX ,它提供了类似JQuery的API,并且使XML文档的使用非常愉快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM