Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-解析带有变量标记名的xml字符串?_Java_Xml_Android 2.2 Froyo - Fatal编程技术网

Java-解析带有变量标记名的xml字符串?

Java-解析带有变量标记名的xml字符串?,java,xml,android-2.2-froyo,Java,Xml,Android 2.2 Froyo,我试图解析一个XML字符串,标记名是可变的;我没有看到任何关于如何在不知情的情况下提取信息的例子。例如,我总是知道下面的和标记,但它们的内部/外部可能是从到您命名的任何东西 <?xml version="1.0" encoding="UTF-8"?> <response> <generic> .... </generic> <data>

我试图解析一个XML字符串,标记名是可变的;我没有看到任何关于如何在不知情的情况下提取信息的例子。例如,我总是知道下面的
标记,但它们的内部/外部可能是从
到您命名的任何东西

    <?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>

....
海鸥
3674
34
罗宾
3675
25

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

从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;
}
publicsvoidtreewalk(文档){
treeWalk(document.getRootElement());
}
公共空树丛(元素){
for(int i=0,size=element.nodeCount();i
我在项目中也看到过类似的情况

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


如果XML很小,则使用DOM并通过读取特定标记直接构建实体对象(如employee>或使用XPATh指向您希望标记出现的位置,为您提供实体的提示。通过读取XML中的特定信息直接构建该对象。

如果您不知道标记名是什么,您打算如何有意义地处理它们?您只是要将XML传递给其他应用程序吗?具体是什么你是说“解析”吗?我得到了很多不同的响应;我不想要硬编码的格式,而是一个不需要根据响应名称的更改进行更新的处理类。