簡體   English   中英

如何獲取java xml tap中的總數?

[英]How could I get the total number inside a java xml tap?

對於xml文件視圖:

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

在設置NodeList來檢查文檔后,
我希望可以將每個“ SUB NUM =“ [x]”“
對於我為其設置的代碼:

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

nList.length將返回“ 2”,這是因為xml的水龍頭中有2個被命名為:“ NUM”,但是我只想檢查每個組。
有什么主意我怎么能得到像這樣的長度:

SUB NUM [1]找到:[1]抽頭名稱的長度:[NAME]
SUB NUM [2]找到:[1]抽頭名稱的長度:[NAME]

這可以如下進行。 僅使用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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM