2016-08-30 5 views
0

:ドキュメントをチェックのためのIセットアップのNodeList後java xmlタップ内の総数を取得するにはどうすればよいですか? xmlファイルビューの

<?xml version="1.0"?> 
<EXAMPLE DATE="20160830"> 
<SUB NUM="1"> 
    <NAME>Peter</NAME> 
</SUB> 
<SUB NUM="2"> 
    <NAME>Mary</NAME> 
</SUB> 
</EXAMPLE> 


私はそれがそれぞれ "SUBのNUM =" [X] ""
に "NAME" をタップをカウントすることができますしたいです私はそれのために設定されたコードの場合 :

NodeList nList= doc.getElementsByTagName("NUM"); // doc has been set correct and get successful 

nList.lengthのように命名されたタップの2持つため、XMLに「2」を返します:「NUM」を、私はそれぞれを確認したいですグループの
は、私のような長さを得ることができるどのように任意のアイデアです:

SUB NUM [1]が見つかりました:[NAME]
SUB NUM [2]が見つかりました:[1]の長さのタップ名を持つ[1]の長さタップ名:[NAME]

+0

上にない場合は、1行XPath式でこれを取得することができ、通常は反復して印刷することができるはずです。 – EJP

答えて

0

これは次のように行うことができます。 JAVA8構文を使用したハッシュマップ印刷。あなたは8

import java.io.StringReader; 
import java.util.HashMap; 

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class NumCountHandler extends DefaultHandler { 

    private HashMap<String, Integer> countOfNum = new HashMap<String, Integer>(); 

    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

     if (qName.equalsIgnoreCase("SUB")) { 
      String attributeNum = attributes.getValue("NUM"); 
      // System.out.println("Here" + qName +"" +); 
      if (countOfNum.containsKey(attributeNum)) { 
       Integer count = countOfNum.get(attributeNum); 
       countOfNum.put(attributeNum, new Integer(count.intValue() + 1)); 
      } else { 
       countOfNum.put(attributeNum, new Integer(1)); 
      } 
     } 
    } 

    public static void main(String[] args) { 

     try { 
      String xml = "<EXAMPLE DATE=\"20160830\"> <SUB NUM=\"1\"> <NAME>Peter</NAME> </SUB> <SUB NUM=\"2\"> <NAME>Mary</NAME> </SUB></EXAMPLE>"; 
      InputSource is = new InputSource(new StringReader(xml)); 

      SAXParserFactory factory = SAXParserFactory.newInstance(); 
      SAXParser saxParser = factory.newSAXParser(); 
      NumCountHandler userhandler = new NumCountHandler(); 
      saxParser.parse(is, userhandler); 

      userhandler.countOfNum 
        .forEach((k, v) -> System.out.println("SUB NUM [" + k + "]" + "Length with tap name :[" + v + "]")); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

プリント

SUB NUM [1]Length with tap name :[1] 
SUB NUM [2]Length with tap name :[1] 
関連する問題