Java XMLStreamReader不能具有更高Unicode平面的属性值吗?

时间:2013-09-11 18:24:07

标签: java unicode attributes xmlstreamreader

让我们创建一个包含两个属性值的XML文件,其中包含一个扩展的unicode char

XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ERROR_XML), "UTF-8"))) {
XMLStreamWriter xmlStreamWriter = outputFactory.createXMLStreamWriter(writer);

xmlStreamWriter.writeStartDocument();
xmlStreamWriter.writeCharacters("\n");
xmlStreamWriter.writeStartElement("start");
xmlStreamWriter.writeAttribute("test1", "11");
xmlStreamWriter.writeAttribute("test2", "22");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEndDocument();
}

生成的文件如下所示:

<?xml version="1.0" ?>
<start test1="11" test2="22"></start>

如果再次读入并检查属性值

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(ERROR_XML), "UTF-8"))) {
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(reader);

xmlStreamReader.nextTag();
if (XMLStreamReader.START_ELEMENT == xmlStreamReader.getEventType() &&
    "start".equals(xmlStreamReader.getLocalName())) 
{
    System.out.println(xmlStreamReader.getAttributeValue(0));
    System.out.println(xmlStreamReader.getAttributeValue(1));
}}

这将打印

11
22

令人惊讶的是,第二个属性值包含2次扩展的unicode char!

以下任何使用扩展字符作为属性值都会增加此计数。 在一个案例中,我收到了12000个相同字符的属性值,而不是一个。 这里发生了什么?

1 个答案:

答案 0 :(得分:0)

Java API对应类中存在错误。

您可以使用&#34; woodstox.jar&#34;做得正确。您需要做的就是修改读取XML文件的代码,如下所示:

  • XMLStreamReader2 而不是 XMLStreamReader
  • XMLInputFactory2 而不是 XMLInputFactory

它会正常工作。我测试了自己。

你可以找到&#34; woodstox.jar&#34;在http://wiki.fasterxml.com/WoodstoxDownload