【问题标题】:XMLEventReader Stax API not able to getName and value for Attribute in JDK 1.8XMLEventReader Stax API 无法获取 JDK 1.8 中属性的名称和值
【发布时间】:2016-12-27 03:06:38
【问题描述】:

我正在使用 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 读取属性名称和值。

【问题讨论】:

    标签: java xml stax


    【解决方案1】:

    这是一个简单的兄弟,简短而快速的答案是

    要获取属性名称,请使用此

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

    获取属性值使用this

    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 on jenkov

    【讨论】:

    • 我知道了,我之前已经为属性导入了类表单 java.swing。现在我改为导入 javax.xml.stream.events.Attribute。它现在工作正常。错误在于我没有得到名称和值方法的导入。
    • 好消息兄弟,请永远照顾好这件简单的事情,希望你永远成功(:
    猜你喜欢
    • 2019-06-19
    • 2011-10-02
    • 2012-01-20
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多