Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 - Fatal编程技术网

用java解析高级XML

用java解析高级XML,java,xml,Java,Xml,嗨,我想解析非常奇怪的xml,如下所示: <foo> <foo1> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2&

嗨,我想解析非常奇怪的xml,如下所示:

<foo>
    <foo1>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
    </foo1>
</foo>

<foo>
    <foo1>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
        <foo2></foo2>
    </foo1>
</foo>
使用本教程时,我无法从foo2获取值:

但是如果我们有相同的参数,比如foo2,它就不起作用了,我建议使用它。这是一个免费的图书馆,应该可以毫不费力地完成这项工作

首先,将XML字符串解析为文档。此文档表示您的xml

    SAXBuilder reader = new SAXBuilder();
    Document doc = null;
    try
    {
        doc = reader.build(new File("Path to XML")); //also string is possible
    }
    catch (JDOMException | IOException e)
    {
        e.printStackTrace();
    }
在这之后,你可以迭代它的每个孩子。那将是外部的一个。如果您不知道有多少childdepth,您可以随时检查childCount!=0比多了一个。也许可以为此创建一个递归方法

for (Element e : doc.getRootElement().getChildren())
    {
         // do something with the childs here for example
         e.getText(); //would be "" in your case
         for(Element child : e.getChildren()){
             //do something with the child child
         }
    }
等等。您可以从元素中获取每个属性或getName等


这是因为您必须有一个父项才能容纳所有其他元素,如下例所示:

<parentFoo>
    <foo>
        <foo1>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
        </foo1>
    </foo>

    <foo>
        <foo1>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
           <foo2></foo2>
        </foo1>
    </foo>
</parentFoo>

我同意JAXB是一条出路。为xml使用在线XSD生成器。使用该XSD并使用Netbeans提供的JAX-B绑定来创建Java类


然后,您可以使用标准JAX-B API对XML进行marshall和unmarshall处理。

//规范化您的XML,然后使用该XML创建文档,然后按照以下代码进行操作

NodeList nList = doc.getElementsByTagName("foo");
        for (int temp = 0; temp < nList.getLength(); temp++) { // loop for foo
            Node nodeTable = nList.item(temp);
            Element xmlFoo = (Element) nodeTable;
            if (nodeTable.getNodeType() == Node.ELEMENT_NODE) {
            NodeList nodeListFoo1 = xmlFoo.getElementsByTagName("foo1");
            for (int i = 0; i < nodeListFoo1.getLength(); i++) { // loop for foo1
                Node nodefoo2 = nodeListFoo1.item(i);
                Element elementfoo1 = (Element) nodefoo2;
                // Collect foo2 
                NodeList nodeListfoo2Name = elementfoo1.getElementsByTagName("foo2");
                for (int j = 0; j < nodeListfoo2Name.getLength(); j++) { //// loop for foo2
                    Node nodefoo2Name = nodeListfoo2Name.item(j);
                    Element elementfoo2Name = (Element) nodefoo2Name;
                    //TODO: write code here, what you want to collect from foo2
                    }
                }
            }
        }

您应该在google上搜索Jaxb,或者单击tutorial,记住,不要试图去发现这个问题。这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。请更详细地描述您的问题,或者在问题本身中加入a。您可能应该告诉我们您将要解析的内容。要一份清单吗?一根绳子?到字符串[]?到您自己的数据结构?这不是有效的XML。在任何标准的网络浏览器中打开都会被告知原因。为什么是a-1?这是一个完全合理的答案?