久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

為什么 STAX 解析器認為這是有效的 XML 1.0 而不是

Why does the STAX parser think this is valid XML 1.0 but not 1.1?(為什么 STAX 解析器認為這是有效的 XML 1.0 而不是 1.1?)
本文介紹了為什么 STAX 解析器認為這是有效的 XML 1.0 而不是 1.1?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

在下面的代碼示例中,我使用 STaX 解析器來解析一段 XML.如果我通過它運行 xml10,它會按預期工作.xml11 字符串(相同,除了 xml 版本) - 它拋出 NullPointerException.我在使用 JDK 1.6 的 Mac 上運行它.

In the following code example, I use the STaX parser to parse a piece of XML. If I run the xml10 through it, it works as expected. The xml11 string (which is the same, except for the xml version) - it throws a NullPointerException. I'm running this on a Mac using JDK 1.6.

import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Stack;

/**
 */
public class StaxSucks {

    static String xml10 ="<?xml version="1.0" encoding="utf-8" ?>
"+
                        "<anElement/>";

    static String xml11 ="<?xml version="1.1" encoding="utf-8" ?>
"+
            "<anElement/>";


    static void parse(InputStream is) throws Exception{
        final XMLInputFactory factory = XMLInputFactory.newInstance();
        factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
        final XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(is);
        Stack<QName> XMLDEPTH = new Stack<QName>();
        int eventType = xmlStreamReader.next();
        while(eventType != XMLStreamConstants.END_DOCUMENT){
            if(XMLStreamConstants.START_ELEMENT == eventType){
                QName eventName = xmlStreamReader.getName();
                XMLDEPTH.push(eventName);
            }else if(XMLStreamConstants.END_ELEMENT == eventType){
                //ends should always match the starts.
                QName eventName = xmlStreamReader.getName();
                if(XMLDEPTH.peek().equals(eventName)){
                    XMLDEPTH.pop();
                }else{
                    System.out.println("Hit an end with a non-matching beginning:"+eventName);
                }
            } else{
                System.out.println("Hit event type:"+eventType);
            }
            eventType = xmlStreamReader.next();
        }
        System.out.println("Stack is empty:"+XMLDEPTH.empty());

    }

    public static void main(String[] args) throws Exception{
        System.out.println("Starting XML1.0");
        InputStream is = new ByteArrayInputStream(xml10.getBytes("utf8"));
        parse(is);
        System.out.println("Starting XML1.1");
        is = new ByteArrayInputStream(xml11.getBytes("utf8"));
        parse(is);
    }
}

堆棧跟蹤:

Exception in thread "main" java.lang.NullPointerException
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanStartElement(XML11NSDocumentScannerImpl.java:351)
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl$NS11ContentDriver.scanRootElementHook(XML11NSDocumentScannerImpl.java:889)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3104)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(XML11NSDocumentScannerImpl.java:852)
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:554)
    at StaxSucks.parse(StaxSucks.java:46)
    at StaxSucks.main(StaxSucks.java:74)

推薦答案

您好 這是 Sun/Oracle JDK 中 stax 實現損壞的案例,IBM JDK 工作正常,或者您甚至可以只使用最新的 Xerces jars會沒事的.

Hi This is a case of broken stax implementation in the Sun/Oracle JDK, IBM JDK works fine, or you can even just use the latest Xerces jars and you will be fine.

您可以從以下位置下載 xerces jar:http://xerces.apache.org/mirrors.cgi#binary

You can download xerces jars from: http://xerces.apache.org/mirrors.cgi#binary

dims@dims-laptop-520:~/test$ /usr/lib/jvm/java-6-sun/bin/java -cp . StaxSucks
Starting XML1.0
Stack is empty:true
Starting XML1.1
Exception in thread "main" java.lang.NullPointerException
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanStartElement(XML11NSDocumentScannerImpl.java:351)
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl$NS11ContentDriver.scanRootElementHook(XML11NSDocumentScannerImpl.java:889)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3104)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(XML11NSDocumentScannerImpl.java:852)
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:554)
    at StaxSucks.parse(StaxSucks.java:26)
    at StaxSucks.main(StaxSucks.java:54)
dims@dims-laptop-520:~/test$ java -cp .:xercesImpl.jar:xml-apis.jar StaxSucks
Starting XML1.0
Stack is empty:true
Starting XML1.1
Stack is empty:true

這篇關于為什么 STAX 解析器認為這是有效的 XML 1.0 而不是 1.1?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Upload progress listener not fired (Google drive API)(上傳進度偵聽器未觸發(Google 驅動器 API))
Save file in specific folder with Google Drive SDK(使用 Google Drive SDK 將文件保存在特定文件夾中)
Google Drive Android API - Invalid DriveId and Null ResourceId(Google Drive Android API - 無效的 DriveId 和 Null ResourceId)
Google drive api services account view uploaded files to google drive using java(谷歌驅動api服務賬戶查看上傳文件到谷歌驅動使用java)
Google Drive service account returns 403 usageLimits(Google Drive 服務帳號返回 403 usageLimits)
com.google.api.client.json.jackson.JacksonFactory; missing in Google Drive example(com.google.api.client.json.jackson.JacksonFactory;Google Drive 示例中缺少)
主站蜘蛛池模板: 国产亚洲一区二区精品 | 亚洲国产精品99久久久久久久久 | 日日日日操| 中文字幕av亚洲精品一部二部 | 久久成人国产精品 | 国产一级视频在线观看 | 日韩图区 | 欧美一级特黄aaa大片在线观看 | 精品美女久久久久久免费 | 国产乱一区二区三区视频 | 99re热这里只有精品视频 | 成人亚洲网站 | 日韩精品一区二区三区在线播放 | 婷婷色综合 | 亚洲毛片在线观看 | 久久久精品网 | 男人天堂免费在线 | 国产精品美女久久久久aⅴ国产馆 | 国产精品久久久久无码av | a在线观看 | 欧美激情va永久在线播放 | 国产成人精品免费视频大全最热 | 午夜午夜精品一区二区三区文 | 国产精品精品久久久 | 亚洲精品在线免费看 | 国产乱码精品一区二区三区五月婷 | 国产精品成人在线观看 | 爱高潮www亚洲精品 中文字幕免费视频 | www.99热.com| 91av免费看| 网页av| 国产精品久久久99 | 国产精品自拍啪啪 | 六月婷婷久久 | 日韩久久久一区二区 | 99精品欧美一区二区蜜桃免费 | 九九精品在线 | 欧美精品一区二区三区在线播放 | 日韩三级电影一区二区 | 国产精品久久久久久久久免费丝袜 | 国产精品日产欧美久久久久 |