当使用硬编码值时,只有 XML 解析器在工作

发布于 2024-12-15 15:55:43 字数 2664 浏览 3 评论 0原文

这是我的程序, 我正在使用 STAX Parser 来解析 XML 文档。 当我使用硬编码值时,只有它的工作(item.account =“sss”;) 但是当我尝试使用时 item.account = eventReader.getElementText(); 列表的大小为0 (列表项 = new ArrayList();)

import java.io.StringReader;
import java.util.*;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class Pavan {
    static final String DATE        = "date";
    static final String ITEM        = "item";
    static final String MODE        = "mode";
    static final String UNIT        = "unit";
    static final String CURRENT     = "current";
    static final String INTERACTIVE = "interactive";

    @SuppressWarnings({ "unchecked", "null" })
    public static void main(String args[]) {
        List<Position> items = new ArrayList<Position>();
        try {
            String documentAsString = "<request>\r\n" + "<accountid>1234</accountid>\r\n" + "<accountid>234</accountid>\r\n" + "</request>";

            StringReader stringReadertext = new StringReader(documentAsString);
            XMLInputFactory inputFactory = XMLInputFactory.newInstance();
            XMLStreamReader reader = inputFactory.createXMLStreamReader(stringReadertext);

            XMLEventReader eventReader = inputFactory.createXMLEventReader(reader);
            Position item = null;

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

                if (event.isStartElement()) {
                    StartElement startElement = event.asStartElement();
                    if (startElement.getName().toString().equals("accountid")) {

                        item = new Position();

                        item.account = "sss";
                        //item.account = eventReader.getElementText();
                    }

                }
                // If we reach the end of an item element we add it to the list
                if (event.isEndElement()) {
                    EndElement endElement = event.asEndElement();
                        if (endElement.getName().toString().equals("accountid")) {
                        items.add(item);
                    }
                }

            }
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
        System.out.println(items.size());
    }

}


class Position
{
String account ;
}

This is my program,
I am using STAX Parser to parse an XML document .
When I use hardcoded value then only its working (item.account = "sss";)
But when ever if I try to use
item.account = eventReader.getElementText();
The size of the List is 0
(List items = new ArrayList();)

import java.io.StringReader;
import java.util.*;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class Pavan {
    static final String DATE        = "date";
    static final String ITEM        = "item";
    static final String MODE        = "mode";
    static final String UNIT        = "unit";
    static final String CURRENT     = "current";
    static final String INTERACTIVE = "interactive";

    @SuppressWarnings({ "unchecked", "null" })
    public static void main(String args[]) {
        List<Position> items = new ArrayList<Position>();
        try {
            String documentAsString = "<request>\r\n" + "<accountid>1234</accountid>\r\n" + "<accountid>234</accountid>\r\n" + "</request>";

            StringReader stringReadertext = new StringReader(documentAsString);
            XMLInputFactory inputFactory = XMLInputFactory.newInstance();
            XMLStreamReader reader = inputFactory.createXMLStreamReader(stringReadertext);

            XMLEventReader eventReader = inputFactory.createXMLEventReader(reader);
            Position item = null;

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

                if (event.isStartElement()) {
                    StartElement startElement = event.asStartElement();
                    if (startElement.getName().toString().equals("accountid")) {

                        item = new Position();

                        item.account = "sss";
                        //item.account = eventReader.getElementText();
                    }

                }
                // If we reach the end of an item element we add it to the list
                if (event.isEndElement()) {
                    EndElement endElement = event.asEndElement();
                        if (endElement.getName().toString().equals("accountid")) {
                        items.add(item);
                    }
                }

            }
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
        System.out.println(items.size());
    }

}


class Position
{
String account ;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女中豪杰 2024-12-22 15:55:43

因为你的结束事件被“吃掉”并且 if (event.isEndElement()) 从未被触发。但是,当您硬编码时,由于缺少“eventReader.getElementText()”,因此会触发“if (event.isEndElement())”。

Because your end event was "eaten" and the if (event.isEndElement()) was never triggered. However, when you hardcode, "if (event.isEndElement())" is triggered because the missing of "eventReader.getElementText()".

回心转意 2024-12-22 15:55:43

我相信 getElementText() 正在消耗结束事件,因此您的第二个 if 块永远不会输入。该方法的文档有点令人困惑。

i believe that getElementText() is consuming the end event, so your second if block is never entered. the docs for that method are a little confusing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文