Как сохранить тег XML в виде массива в Java - PullRequest
0 голосов
/ 30 марта 2011

в моем приложении я анализирую XML-файл. В XML-файле у меня есть 50 тегов с тем же именем question, теперь я хочу сохранить весь тег с именем вопрос в виде массива ....

Среди сохраненных тегов я хочу, чтобы в текстовом представлении был размещен только один тег вопроса ...

как это сделать .... пожалуйста, помогите мне .....

Ответы [ 3 ]

4 голосов
/ 30 марта 2011

открытый класс 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;
    };
}

}

0 голосов
/ 30 марта 2011

Этот ответ кажется легко адаптируемым к вашим потребностям.В этом примере вопросы хранятся на карте, но это легко изменить на ArrayList или массив.

0 голосов
/ 30 марта 2011

Вы можете использовать анализатор DOM, вот ссылка на класс DocumentBuilder.

Как только вы используете метод parse из DocumentBuilder и получите свой DocumentВы можете использовать функцию, подобную этой, чтобы получить элементы как NodeList:

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

В вашем случае вы передадите созданный вами объект Document, проанализировав XML, а затем question в качестве nodeName.

Получив 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.
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...