Java - 用变量标记名解析xml字符串?

时间:2010-12-14 21:54:19

标签: java xml android-2.2-froyo

我正在尝试解析XML字符串,并且标记名是可变的;我还没有看到任何关于如何在不知情的情况下提取信息的例子。例如,我将始终知道下面的<response><data>标记,但是它们内部/外部的标记可以是<employee>到您命名的任何内容。

    <?xml version="1.0" encoding="UTF-8"?>

     <response> 
        <generic>
           ....
        </generic>   
        <data>
             <employee>
                <name>Seagull</name>
                <id>3674</id>
                <age>34</age>
             </employee>
             <employee>
                <name>Robin</name>
                <id>3675</id>
                <age>25</age>
             </employee>
       </data>
   </response>

2 个答案:

答案 0 :(得分:0)

您可以将其解析为通用dom对象并遍历它。例如,您可以使用dom4j执行此操作。

从dom4j快速入门指南:

public void treeWalk(Document document) {
    treeWalk( document.getRootElement() );
}

public void treeWalk(Element element) {
    for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
        Node node = element.node(i);
        if ( node instanceof Element ) {
            treeWalk( (Element) node );
        }
        else {
            // do something....
        }
    }
}

public Document parse(URL url) throws DocumentException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(url);
    return document;
}

答案 1 :(得分:0)

我在项目中看到了类似的情况。

如果要处理大型XML,可以使用Stax或Sax解析器来读取XML。在每个步骤(如到达end元素),将数据输入到您选择的Map或dta结构中,其中将标记名称作为键,将值保存为Map中的值。最后,一旦完成解析,使用此Map来确定要构建的对象,最后您将在XML中具有正确的信息实体表示

如果XML很小,请使用DOM并通过读取特定标记直接构建实体对象(如employee&gt;或使用XPATh到您希望标记存在的位置,为您提供实体的提示。直接通过从XML中读取特定信息。