【发布时间】:2014-12-26 22:04:27
【问题描述】:
我尝试用java解析XML
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new ByteArrayInputStream(msg.getBytes("UTF-8")));
一切似乎都还好
<data>äöü</data>
被正确解析(尤其是关于德语变音符号)。
但是当我尝试解析时
<däta>xxx</däta>
解析器抛出异常,其中带有变音符号的名称似乎不起作用:
org.w3c.dom.DOMException: WFä at org.apache.harmony.xml.dom.NodeImpl.setName(NodeImpl.java:286) at
org.apache.harmony.xml.dom.AttrImpl.<init>(AttrImpl.java:55) at
org.apache.harmony.xml.dom.DocumentImpl.createAttribute(DocumentImpl.java:324) at
org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:314) at
org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:321) at
org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:128)
【问题讨论】:
-
我什至不确定这样的标签名称是否合法;是吗?
-
您收到什么异常,数据实际上是 UTF-8 吗?您是否尝试过直接解析输入流? XML 声明是什么样的?
-
我无法重现您的问题,
db.parse不会引发任何异常,doc.getFirstChild()返回däta节点,当我在其上调用getTextContent()时,我得到xxx。你能发布你得到的异常的整个堆栈跟踪吗? -
你可以编辑你自己的问题:) 不管怎样,Apache Harmony 显然认为 XML 标识符必须是严格的 ASCII。从源码中看的很清楚:grepcode.com/file/repo1.maven.org/maven2/org.robovm/robovm-rt/…
-
哎哟!在查看了和谐代码之后,我必须声明,他们实施错误(违反标准,仅使用 ascii 而不是“unicode 字母字符”)。所以这实际上是一个实现错误,我们必须使用另一个解析器:( --- 谢谢大家。
标签: java xml diacritics tagname