Java 如何将XML转换为列表<;地图>;

Java 如何将XML转换为列表<;地图>;,java,xml,xpath,Java,Xml,Xpath,我有一个XML数据,如下示例所示 <EMP> <PERSONAL_DATA> <EMPLID>AA0001</EMPLID> <NAME>Adams<NAME> </PERSONAL_DATA> <PERSONAL_DATA> <EMPLID>AA0002<EMPLID> <NAME>Paul<NAME

我有一个XML数据,如下示例所示

<EMP>
   <PERSONAL_DATA>
     <EMPLID>AA0001</EMPLID>
     <NAME>Adams<NAME>
   </PERSONAL_DATA>
   <PERSONAL_DATA>
     <EMPLID>AA0002<EMPLID>
     <NAME>Paul<NAME>
    </PERSONAL_DATA>
</EMP>

AA0001
亚当斯
AA0002
保罗
我想在映射(KEY,VALUE)KEY=tagname,VALUE=VALUE中存储每个员工的信息,并想在java中使用XPATH为所有员工创建一个列表。我怎么样? 请建议 谢谢

您可以使用JAXB

我至少可以看到两种解决方案。首先是:使用字段
emplid
name
创建类
PersonalData
。用
@xmlement
注释标记它们。解析XML。这将创建
个人数据
实例的集合。现在,如果您确实需要,请迭代此集合并创建地图

但是您可以直接将XML映射到映射。看看下面的例子

您可以使用JAXB

我至少可以看到两种解决方案。首先是:使用字段
emplid
name
创建类
PersonalData
。用
@xmlement
注释标记它们。解析XML。这将创建
个人数据
实例的集合。现在,如果您确实需要,请迭代此集合并创建地图


但是您可以直接将XML映射到映射。看看下面的例子

为什么要使用XPATH`字符串表达式=“//EMP/PERSONAL_DATA/*”
XPathExpression expr=xpath.compile(表达式)

Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
列表=新的ArrayList();
对于(inti=0;i
为什么要使用XPATH`字符串表达式=“//EMP/PERSONAL_DATA/*”
XPathExpression expr=xpath.compile(表达式)

Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
列表=新的ArrayList();
对于(inti=0;i
您可以使用普通的东西或尝试groovy:

String xml='''<EMP>
   <PERSONAL_DATA>
     <EMPLID>AA0001</EMPLID>
     <NAME>Adams</NAME>
   </PERSONAL_DATA>
   <PERSONAL_DATA>
     <EMPLID>AA0002</EMPLID>
     <NAME>Paul</NAME>
    </PERSONAL_DATA>
</EMP>
'''
Node parsed=new XmlParser().parseText(xml)
List<Map> list=[]
parsed.each {
    Map<String,String> map=[:]
    it.children().each {
        map[it.name()]=it.value()[0]
        println "${it.name()} ${it.value()[0]}"
    }
    list.add(map)
}
println list
stringxml=''
AA0001
亚当斯
AA0002
保罗
'''
已解析节点=新的XmlParser().parseText(xml)
列表=[]
解析每个{
Map=[:]
它是。每个孩子(){
map[it.name()]=it.value()[0]
println“${it.name()}${it.value()[0]}”
}
列表。添加(地图)
}
打印列表
您可以使用普通的东西或尝试groovy:

String xml='''<EMP>
   <PERSONAL_DATA>
     <EMPLID>AA0001</EMPLID>
     <NAME>Adams</NAME>
   </PERSONAL_DATA>
   <PERSONAL_DATA>
     <EMPLID>AA0002</EMPLID>
     <NAME>Paul</NAME>
    </PERSONAL_DATA>
</EMP>
'''
Node parsed=new XmlParser().parseText(xml)
List<Map> list=[]
parsed.each {
    Map<String,String> map=[:]
    it.children().each {
        map[it.name()]=it.value()[0]
        println "${it.name()} ${it.value()[0]}"
    }
    list.add(map)
}
println list
stringxml=''
AA0001
亚当斯
AA0002
保罗
'''
已解析节点=新的XmlParser().parseText(xml)
列表=[]
解析每个{
Map=[:]
它是。每个孩子(){
map[it.name()]=it.value()[0]
println“${it.name()}${it.value()[0]}”
}
列表。添加(地图)
}
打印列表

谢谢。。我之所以使用XPATH,是因为我只需要从XML中过滤一些信息(我只给出了示例),但是在您的代码中,如果假设[…]我的意思是某些元素有嵌套元素,我使用了递归,但没有正常工作,如果有任何建议,请欢迎..在您的代码中如果(node.getNodeName()!=null){nodeMap.put(node.getNodeName(),node.getTextContent());list.add(nodeMap);}如何将一个员工信息放在一个映射中。我的意思是一个映射中的EMPLID和NAME,然后第二个映射到另一个映射中,我想创建一个映射列表。我的完整问题是,如果可能的话,请看一看。谢谢……谢谢……我使用XPATH,因为我只需要从XML中过滤一些信息(我只给出了示例),但在您的代码中,如果假设[…]我的意思是某些元素有嵌套元素,我使用了递归,但没有正常工作,如果有任何建议,请欢迎..在您的代码中,如果(node.getNodeName()!=null){nodeMap.put(node.getNodeName(),node.getTextContent());list.add(nodeMap);}如何在一张地图上显示一名员工的信息。我的意思是在一张地图上同时显示员工ID和姓名,然后再在另一张地图上显示,我想创建一个地图列表。我的完整问题是,如果可能的话,请看一看。谢谢…我的完整问题是,如果可能的话,请看一看。他们的样本很好。我不熟悉ar with xpath-我试着用你的xml来愚弄它,但没有乐趣。我的完整问题是,请看一看是否可能。他们的示例很好。我不熟悉xpath-我试着用你的xml来愚弄它,但没有乐趣。可能重复@Sandeep-投票关闭,因为这是一个完全重复的问题stion你昨天问了。但是,我提供了另一个问题的答案。这里:@Sandeep-投票结束的可能重复,因为这与你昨天问的问题完全相同。但是,我提供了另一个问题的答案。这里: