1

ファイルに埋め込まれた 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): 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) で

4

2 に答える 2

2

これが私がやったことです:

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 を作成するにはどうすればよいですか?

于 2012-12-17T19:18:36.840 に答える
1

同じプログラム内で文字列とバイトを相互に変換する必要はありません。次のように簡単です。

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

Document dom = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
于 2012-12-17T22:37:25.627 に答える