2016-11-22 26 views
-1

Mapのすべての属性をStringsに変換するにはどうすればよいですか? Mapにキーと値として出力が必要です。 Map<String, String>xml文字列をマップに変換する方法<String、String>

<persons xmlns="http://www.sample.com/restapi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <delivery></delivery> 
    <Order>1</Order> 
    <person1> 
     <personorder> 
      <email>[email protected]</email> 
      <name>Smith </name> 
      <data> 
       <approvedata> 
        <approve> 
         <Label>Consent</Label> 
         <underline>false</underline> 
        </approve> 
       </approvedata> 
      </data> 
     </personorder> 
    </person1> 
    </persons> 



    output : 
............................... 
     Order,1 
     email,[email protected] 
     Label,Consent 
+0

まあ2人の人物がいると想像するのは不可能かもしれません。さて、私たちはその人のメールを両方とも1つの名前の下に保存する必要があります。したがって、その人の電子メールの1つが常に優先されます。あなたはそのようなシナリオをどのように扱いたいのですか?予想される出力を意味しますか? –

+0

あなたは* anything *を試しましたか? JavaでのXMLの解析については、多数のリソースがあります。あなたがしなければならないことは、それらを検索することだけです。 – tnw

+0

可能な重複はありますか? http://stackoverflow.com/questions/1537207/how-to-convert-xml-to-java-util-map-and-vice-versa –

答えて

0

すなわち私はXPathを使用してソリューションを実現することができました。 xpathクエリは、任意のテキストを持つリーフ要素を検索します。次に、単純なループは、xpathの結果NodeListをMapに変換します。ここで

1つの方法に包まれたソリューションです。ここ

public static Map<String, String> getElementsWithText(Document xmlDoc) throws XPathException 
{ 
    Map<String, String> elementsWithText = new HashMap<>(); 

    final String leafElementsWithTextXPathQuery = "//*[not(child::*) and text()]"; 
    XPath xPath = XPathFactory.newInstance().newXPath(); 
    NodeList list = (NodeList)xPath.compile(leafElementsWithTextXPathQuery) 
     .evaluate(xmlDoc, XPathConstants.NODESET); 
    for (int i = 0; i < list.getLength() ; i++) { 
     Node node = list.item(i); 
     elementsWithText.put(node.getNodeName(), node.getTextContent()); 
    } 
    return elementsWithText; 
} 

が質問からXMLをロードテストの主である:printlnから

public static void main(String[] args) 
{ 
    try { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document xmlDoc = builder.parse(new InputSource(new FileReader("C://Temp/xx.xml"))); 
     System.out.println(getElementsWithText(xmlDoc)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

出力:

{Order=1, underline=false, name=Smith , Label=Consent, [email protected]} 
関連する問題