how to store an xml tag as an array in java

后端 未结 3 1439
醉梦人生
醉梦人生 2021-01-17 08:06

in my app i am parsing an xml file. In the xml file i am having 50 tags of the same name question , now i want to store all the tag named as question as an arra

相关标签:
3条回答
  • 2021-01-17 08:18

    You can use the DOM parser, here is a link to the DocumentBuilder class.

    Once you use the parse method out of DocumentBuilder and get your Document you can use a function like this to get the items as a NodeList:

        public static NodeList getNodesByName(Document doc, String nodeName)
        {
                Element docEle = doc.getDocumentElement();
                NodeList list = docEle.getElementsByTagName(nodeName);
                return list;
        }
    

    In your case you would pass in the Document object you created by parsing the XML and then question as your nodeName.

    Once you have your NodeList, you can iterate through it using a for loop and the .item() method.

                if(list != null && list.getLength() > 0) {
                    for(int i = 0 ; i < list.getLength();i++) {
                        Element element = (Element)list.item(i);
                        String textVal = element.getFirstChild().getNodeValue();
                        //Once you get the value you can put it into your
                        //array or just use it here.
                    }
                }
    
    0 讨论(0)
  • 2021-01-17 08:23

    This answer seems easily adaptable to your needs. In the example the questions are stored in a map, but it is easy to change this to an ArrayList or an array.

    0 讨论(0)
  • 2021-01-17 08:29
    public class CustomHandler extends DefaultHandler {
    
        private ArrayList<String> questionList;
        private boolean questionBuffering;
        private StringBuilder sb;
    
    
    
        @Override
        public void startDocument() throws SAXException {
        questionList = new ArrayList<String>();
        } 
    
        @Override
        public void endDocument() throws SAXException {
        } 
    
        @Override
        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
            if (localName.equals("question")) {
                questionBuffering = true;
            }
    
        }
    
    
        @Override
        public void characters(char ch[], int start, int length) {
            if(questionBuffering) {
                sb.append(ch, start, length);
            }
    
        } 
    
        @Override
        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
            if (localName.equals("question")) {
                questionBuffering = false;
            questionList.add(sb.toString());
            }
        }
    
        public ArrayList<String> getResult() {
            return questionList;
            };
        }
    }
    
    0 讨论(0)
提交回复
热议问题