XMLEventReader Stax API не может получить имя и значение для атрибута в JDK 1.8

Я использую Stax XML EventReader для чтения из xml. Мне нужно проверить несколько тегов в xml, для которых я использую то же самое. Я могу успешно прочитать имя тега и символы из xml, но не могу прочитать имя и значение атрибута. Я использую jdk 1.8.111

XML:

<xml>
<status request_id="fa844c52-daeb-4d24-920b-581ce2ac1afe1482232642212"     response_time="00:00:00:039">

КОД:

public static String XMLParseAttribute() throws XMLStreamException, IOException {

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    in = IOUtils.toInputStream(URLResponse, "UTF-8");
    eventReader = inputFactory.createXMLEventReader(in);                
    XMLEvent event = eventReader.nextEvent();

        while(eventReader.hasNext())
        {
            XMLEvent event = eventReader.nextEvent();

                if (event.isStartElement()) {
                    Iterator<Attribute> itr = event.asStartElement().getAttributes();
                    while(itr.hasNext()){
                        Attribute attribute = itr.next();
                        attribute. //get name and value here
                    }
                }
             }
        //Something like this below
        return attribute.getName().toString();
        }

Пожалуйста, подскажите, как использовать этот XMLEventReader для чтения имени и значения атрибута.


person user3592502    schedule 27.12.2016    source источник


Ответы (1)


Это просто, братан, короткий и быстрый ответ:

чтобы получить имя атрибута, используйте это

String name = attribute.getName().toString();

чтобы получить значение атрибута, используйте это

String value = attribute.getValue();

полный код для вашего метода (я исключил возвращаемый тип) и переупорядочил код

public static void XMLParseAttribute() throws XMLStreamException, IOException
{

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    InputStream in = new FileInputStream("input.xml");
    XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
    XMLEvent event;

    while (eventReader.hasNext())
    {
        event = eventReader.nextEvent();

        if (event.isStartElement())
        {
            String elemntName = event.asStartElement().getName().getLocalPart();
            System.out.println(elemntName);
            Iterator<Attribute> iterator = event.asStartElement().getAttributes();
            while (iterator.hasNext())
            {
                Attribute attribute = iterator.next();
                String value = attribute.getValue();
                String name = attribute.getName().toString();
                System.out.println("\t" + name + " " + value);
            }
        }
    }
}

и вот полный код

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.xml.stream.*;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.XMLEvent;

public class XmlReader
{

public static void main(String[] args) throws XMLStreamException, IOException
{
    XMLParseAttribute("input.xml");
}

public static void XMLParseAttribute(String fileName) throws XMLStreamException, IOException
{

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    InputStream in = new FileInputStream(fileName);
    XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
    XMLEvent event;

    while (eventReader.hasNext())
    {
        event = eventReader.nextEvent();

        if (event.isStartElement())
        {
            String elemntName = event.asStartElement().getName().getLocalPart();
            System.out.println(elemntName);
            Iterator<Attribute> iterator = event.asStartElement().getAttributes();
            while (iterator.hasNext())
            {
                Attribute attribute = iterator.next();
                String value = attribute.getValue();
                String name = attribute.getName().toString();
                System.out.println("\t" + name + " " + value);
            }
        }
    }
}}

надеюсь, что это будет полезно и решит вашу проблему (:
вы также можете посмотреть этот простой учебник java xml на jenkov

person Anas    schedule 27.12.2016
comment
Я получил это, я ранее импортировал форму класса java.swing для атрибутов. теперь я изменил импорт javax.xml.stream.events.Attribute. Теперь он отлично работает. Ошибка была в импорте, из-за которого я не получил методы имени и значения. - person user3592502; 27.12.2016
comment
хорошие новости, бро, пожалуйста, всегда заботьтесь об этих простых вещах, надеюсь, у вас все получится (: - person Anas; 27.12.2016