【问题标题】:How do I parse XML with german umlauts in ! names?如何解析带有德语变音符号的 XML!名字?
【发布时间】: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.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)

【问题讨论】:

  • 我什至不确定这样的标签名称是否合法;是吗?
  • 您收到什么异常,数据实际上是 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


【解决方案1】:

根据标签名称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]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2015-07-25
    • 2023-03-08
    相关资源
    最近更新 更多