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。 另外,这是我在堆栈跟踪顶部得到的异常:

12-18 13:51:12.978: W/System.err(5784): org.xml.sax.SAXParseException: 预期名称(位置: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): at 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 xml = "<root><tag>Hello World!</tag></root>";
Document dom = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder().parse(new InputSource(new StringReader(xml)));

最新更新