java - 我如何解析带有德国变音符号的 XML!名字?

标签 java xml diacritics tagname

我尝试通过 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.jav‌​a:314) at 
org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.jav‌​a:321) at 
org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.jav‌​a:128)

最佳答案

根据XML specification标签名称的有效字符是:

":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
| "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

char 'ä' 是 0x00E4,因此在 [#xD8-#xF6] block 中,并且在标签名称中有效。扔掉你的 XML 解析器 ;-)

关于java - 我如何解析带有德国变音符号的 XML!名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27662431/

相关文章:

Java奇怪的计算

java - 如何在android中获取rss feed

java - 如何替换字符串中的变音符号?

python - 编码斯洛伐克语字母,如 : á š Č é

regex - 基于字符串中大写/小写和位置的德语元音变音的 Powershell 正则表达式

Java - Map<String, Integer> 转换为 Object[],如何排序

java - Glassfish 2.1 突然失败

java - 使用 hibernate 在运行时为 derby 数据库设置 bootPassword

php - Gearman 的工作和任务有什么区别?

java - Wildfly 8.2.1最终无法解析配置