在java中解析xml-多个子元素

在java中解析xml-多个子元素,java,xml,parsing,Java,Xml,Parsing,我想用java解析xml元素。我在某些方面取得了成功…但不确定如何做rest..我有xml作为 <MainTag> <userid>user1</userid> <country>US</country> <city>LA</city> <phone> <number>1111111111</number

我想用java解析xml元素。我在某些方面取得了成功…但不确定如何做rest..我有xml作为

<MainTag>
    <userid>user1</userid>            
    <country>US</country>
    <city>LA</city>
    <phone>
            <number>1111111111</number>
    </phone>
    <phone>
              <number>222222222</number>
    </phone>
 </MainTag>
 <MainTag>
    <userid>user2</userid>            
    <country>Aus</country>
    <city>MB</city>
    <phone>
             <number>23233</number>
    </phone>
    <phone>
             <number>8787822</number>
    </phone>
    <phone>
              <number>10101</number>
    </phone>
但是如果是电话,我怎么能解析它呢?因为一个用户有多个电话号码

我想为特定用户找到多个电话号码

例如,在上述xml中

对于user1,有两个电话号码。 对于user2,有三个电话号码


有人能帮忙吗?提前感谢。

首先,这不是格式良好的XML(因为它有两个根元素),除非格式良好,否则无法使用任何解析器API对其进行解析。现在,要解析XML,您通常会使用SAX、DOM或StAX之类的API,或者更好的JAXB绑定API


既然你对这一点似乎还不熟悉,我建议你开始学习。使用StAX而不是DOM或SAX。

我建议使用JAXB,因为您似乎正在尝试将xml绑定到POJO


查看您在这里编写的代码(假设您提供的示例xml是格式良好的xml片段),我想您的
pojo
对象应该有一个电话号码的成员,类型为
List
,您的pojo应该有一个方法,允许您将电话号码添加到
列表
(也许
addPhoneNumber(String phoneNumber){…}

如果您知道传入的xml格式,例如它有多少个节点和名称,您可以使用DocumetBuilderFactory java默认类查看此代码

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    try {

        //documentBuilder instance
        DocumentBuilder db = dbf.newDocumentBuilder();


        Document dom = db.parse("employees.xml");


    }catch(ParserConfigurationException pce) {
        pce.printStackTrace();
    }catch(SAXException se) {
        se.printStackTrace();
    }catch(IOException ioe) {
        ioe.printStackTrace();
    }
//然后得到根元素

Element de= dom.getDocumentElement();
//获取主元素的节点列表

    NodeList nl = de.getElementsByTagName("Employee");
    if(nl != null && nl.getLength() > 0) {
        for(int i = 0 ; i < nl.getLength();i++) {

            //get the employee element
            Element el = (Element)nl.item(i);
}
}
NodeList nl=de.getElementsByTagName(“员工”);
如果(nl!=null&&nl.getLength()>0){
对于(int i=0;i
//然后获取数据

private void getEmployee(Element el) {

    //for each <employee> element get values 
    String name = getTextValue(el,"Name");
    int id = getIntValue(el,"Id");
    int age = getIntValue(el,"Age");


               //get any element attribute
    //String type = el.getAttribute("type");



}
private void getEmployee(元素el){
//为每个元素获取值
String name=getTextValue(el,“name”);
int id=getIntValue(el,“id”);
int age=getIntValue(el,“年龄”);
//获取任何元素属性
//字符串类型=el.getAttribute(“类型”);
}

仅此而已

如果您正在使用SAX解析,请添加SAX标记,因为我不确定您是如何解析此xml的。它的格式不好,因为它有两个根元素。如果要将XML转换为Java对象,是否考虑过使用JAXB?使用JAXB(JSR-222)不需要XML模式:@BlaiseDoughan,不需要元数据,我认为可以从POJO->XML开始。相反,JAXB可以在没有任何注释的情况下解组XML,只要您指定要将XML解组的类。您还可以将JAXB注释添加到现有的Java类中,不需要从XML模式生成它们。@BlaiseDoughan从post中删除了错误的信息。这是我展示的一些示例xml。实际上我的要求是…我想把用户信息和他的电话号码一起存入数据库。user1有2个电话号码user2有3个电话号码。我不知道正确的电话号码会对正确的用户产生什么样的影响。我正在使用saxparser…所以请建议我如何处理sax解析器?是的,我认为你是对的。我需要在我的pojo中有say List phoneList。我可以像phoneLis.add(PhoneNos)一样添加到其中;但我的问题是如何识别特定用户的特定电话号码?听起来一个用户可能有多个电话号码。他们中的任何人都应该工作。
private void getEmployee(Element el) {

    //for each <employee> element get values 
    String name = getTextValue(el,"Name");
    int id = getIntValue(el,"Id");
    int age = getIntValue(el,"Age");


               //get any element attribute
    //String type = el.getAttribute("type");



}