Java 使用 Saxparser 导致抛出异常

标签 java xml saxparser

代码:

public void parse(byte[] payload)
{
    try
    {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();

        DefaultHandler handler = new DefaultHandler()
        {
            boolean eid = false;
            boolean msg_id = false;
            boolean date_time = false;
            boolean temp = false;

            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
            {
                if (qName.equalsIgnoreCase("eid"))
                {
                    eid = true;
                }

                if (qName.equalsIgnoreCase("msg_id"))
                {
                    msg_id = true;
                }

                if (qName.equalsIgnoreCase("date_time"))
                {
                    date_time = true;
                }

                if (qName.equalsIgnoreCase("temperature"))
                {
                    temp = true;
                }
            }

            public void characters(char ch[], int start, int length) throws SAXException
            {

                if (eid)
                {
                    XMLMessagePacket.this.eid = new String(ch, start, length);
                    eid = false;
                }

                if (msg_id)
                {
                    XMLMessagePacket.this.msgId = new String(ch, start, length);
                    msg_id = false;
                }

                if (date_time)
                {
                    XMLMessagePacket.this.time =  new String(ch, start, length);
                    date_time = false;
                }

                if (temp)
                {
                    XMLMessagePacket.this.temperature.parseDouble(new String(ch, start, length));
                    temp = false;
                }

            }

        };

        saxParser.parse(new ByteArrayInputStream(payload), handler);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

XML

<?xml version="1.0"?>
<event>
        <eid>345345</eid>
        <msg_id>3242</msg_id>
        <date_time>11342345</date_time>
        <temperature>100</temperature>
</event>

问题:

org.xml.sax.SAXParseException:序言中不允许出现内容。

最佳答案

只是需要检查一下:一位 friend 曾经整夜与这个“bug”作斗争。您的文件是否有可能有 Byte Order Mark一开始?将其解析为字符串可能会使其消失。 XML 的默认编码是 UTF-8(不需要 BOM)。您可能会被看不见的东西绊倒。

关于Java 使用 Saxparser 导致抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465747/

相关文章:

C++:从 wchar_t* 转换为 unsigned short* 是否安全?

java - 如何在Java中使用Sax/Dom解析器读取xml文件?

java - Optaplanner 6.4.0 webexample车辆路由休息服务未找到错误

java - 使用for循环计算数组中索引的数量

c# - 无法将 System.Xml.XmlNode[] 转换为 System.Byte[]

php - XML "tree"到多级 html 列表

java - 读取和写入 xml 字符串的最简单且最简单的 java API 是什么?

java - 正则表达式-对于 6 个字符,前 3 个字符是静态的,后 3 个是数字

java - JAVA中符号数学的实现

iphone - xml 解析器中奇怪的 iPhone 内存泄漏