2011-11-29 68 views
1

我有一个像下面给出一个示例XML数据..如何转换XML列出<Map>

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

我想存储有关每个雇员的信息在地图(键,值)KEY =标记名,VALUE =价值并且想要为在Java中使用XPATH的所有员工创建一个LIST。我怎样做? 请建议 谢谢

+0

可能重复[提取XML信息来使用XPath列出(http://stackoverflow.com/questions/8296126/ extract-xml-information-to-listmap-using-xpath) –

+0

@Sandeep - 投票结束,因为这是你昨天问的确切重复问题。但是,我提供了另一个问题的答案。在这里:http://stackoverflow.com/questions/8296126/extract-xml-information-to-listmap-using-xpath/8316642#8316642 –

回答

3

您可以使用JAXB。

我可以看到至少2个解决方案。首先是:创建类别PersonalData,其字段为emplidname。标记为@XmlElement注释。解析你的XML。这将创建收集PersonalData的实例。现在迭代这个集合,并创建地图,如果你真的需要它。

但是你可以直接映射XML来映射。看看下面的blog

0

为什么要使用XPATH? `String expression =“// EMP/PERSONAL_DATA/*”;
XPathExpression expr = xpath.compile(expression);

 Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    NodeList nodes = (NodeList) result; 

    List<Map> list = new ArrayList<Map>(); 

    for (int i = 0; i < nodes.getLength(); i++) { 
      Node node = nodes.item(i); 
      Map<String,String> nodeMap = new HashMap<String,String>(); 
      if (node.getNodeName()!=null){     
       nodeMap.put(node.getNodeName(), node.getTextContent()); 
       list.add(nodeMap); 
      } 
    }` 
+0

谢谢.. 我使用XPATH,因为我需要过滤只有一些信息从XML(我只给出示例),但在你的代码如何可能,如果假设[ ... ...]我的意思是一些元素具有嵌套元素,我用递归,但没有正常工作,如果有任何建议,请在你的代码中使用 – Sandeep

+0

if(node.getNodeName()!= null){ nodeMap.put(node.getNodeName(),node.getTextContent()); list.add(nodeMap); }它如何能够将一个员工信息放在一张地图上。我的意思是EMPLID和NAME在一个Map中,然后是第二个到另一个地图,我想创建一个MAP的列表 – Sandeep

+0

我的完整问题就像http://stackoverflow.com/questions/8296126/extract-xml-information-to- listmap-using-xpath请看看如果可能谢谢... – Sandeep

1

,你可以使用正常的jaxp东西或尝试常规:

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 
+0

我的完整问题就像http://stackoverflow.com/questions/8296126/extract-xml-information-to-listmap-using-xpath请看看如果可能 – Sandeep

+0

有http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html - 他们的示例工作正常。我对xpath不熟悉 - 我试着用这个xml来玩弄这个,但没有喜悦。 –