如何在java中将xml标记存储为数组

时间:2022-01-18 15:40:35

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 array....

在我的应用程序中,我正在解析一个xml文件。在xml文件中,我有50个相同名称的标签问题,现在我想将所有名为question的标签存储为数组....

Among those tags saved i want only one question tag to be placed in a text view....

在保存的标签中,我只想在文本视图中放置一个问号标签....

how to perform this....pls help me.....

如何执行此....请帮助我.....

3 个解决方案

#1


4  

public class CustomHandler extends DefaultHandler {

公共类CustomHandler扩展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;
    };
}

}

#2


0  

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.

这个答案似乎很容易适应您的需求。在示例中,问题存储在地图中,但很容易将其更改为ArrayList或数组。

#3


0  

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

您可以使用DOM解析器,这里是DocumentBuilder类的链接。

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:

从DocumentBuilder中使用解析方法并获取Document后,您可以使用这样的函数将项目作为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.

在您的情况下,您将通过解析XML传递您创建的Document对象,然后将question作为您的nodeName。

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

获得NodeList后,可以使用for循环和.item()方法迭代它。

            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.
                }
            }

#1


4  

public class CustomHandler extends DefaultHandler {

公共类CustomHandler扩展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;
    };
}

}

#2


0  

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.

这个答案似乎很容易适应您的需求。在示例中,问题存储在地图中,但很容易将其更改为ArrayList或数组。

#3


0  

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

您可以使用DOM解析器,这里是DocumentBuilder类的链接。

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:

从DocumentBuilder中使用解析方法并获取Document后,您可以使用这样的函数将项目作为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.

在您的情况下,您将通过解析XML传递您创建的Document对象,然后将question作为您的nodeName。

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

获得NodeList后,可以使用for循环和.item()方法迭代它。

            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.
                }
            }