簡體   English   中英

Java從UTF-16LE字符串解析XML

[英]Java Parsing XML from UTF-16LE string

我試圖解析嵌入在文件中的UTF-16LE XML字符串。 我能夠將實際的字符串讀入String對象,我可以在監視窗口中查看XML,看起來很好。 問題是,當我嘗試解析它時,異常會不斷被拋出。 我試圖在getBytes行和InputStreamReader構造函數中指定UTF-16和UTF-16LE,但它仍然拋出異常。

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;

builder = builderFactory.newDocumentBuilder();      
Document document = null;
byte[] bytes = xmlString.getBytes();
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
InputSource is = new InputSource(new InputStreamReader(inputStream));
document = builder.parse(is); // throws SAXParseException

編輯:這是使用Android。 此外,這是我在STACK TRACE頂部得到的例外:

12-18 13:51:12.978:W / System.err(5784):org.xml.sax.SAXParseException:name expected(position:START_TAG @ 1:2 in java.io.InputStreamReader@4118c880)12-18 13: 51:12.978:W / System.err(5784):at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)12-18 13:51:12.978:W / System.err(5784) ):在javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)

這是我最終做的事情:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;

builder = builderFactory.newDocumentBuilder();      
Document document = null;
byte[] bytes = Charset.forName("UTF-16LE").encode(xmlString).array();
InputStream inputStream = new ByteArrayInputStream(bytes);
document = builder.parse(inputStream);

來源: 如何從String創建InputStream?

不需要在同一程序中在字符串和字節之間來回轉換。 這很簡單:

String xml = "<root><tag>Hello World!</tag></root>";

Document dom = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder().parse(new InputSource(new StringReader(xml)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM