首页 > 解决方案 > < 字符的 SaxParser 问题

问题描述

我正在用 java 上的 saxParser 解析一个 xml 文件。我的问题是我有一些这样的行:

<name xml:lang="en">Particulates, < 2.5 um</name>

我没有报告所有代码,但如果标签 == 名称,我会在我的对象上设置名称。

    @Override
public void characters(char[] ch, int start, int length) throws SAXException {
    if (isElementaryExchange && isName ) {
        String name = new String(ch, start, length);
        this.currentElementaryFlowBase.setName(name);
    }

问题是结果是 name=" 2.5 um" 因为我认为“<”破坏了一些东西。有一种方法可以正确解析该行吗?谢谢


编辑使用 Stringbuilder 解决:附加字符方法并仅在元素末尾设置结果!

标签: javaxmlparsingxml-parsingsaxparser

解决方案


“小于”字符<未转义,因此 XML 无效。
请参阅W3C XML 定义中的第 2.4 节

& 符号 (&) 和左尖括号 (<) 不得以其文字形式出现,除非用作标记分隔符,或者在注释、处理指令或 CDATA 部分中。如果在其他地方需要它们,它们必须分别使用数字字符引用或字符串“&”和“<”进行转义。

或者,用 RegEx 术语:

CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

因此,您必须转义<以获得有效的 XML(例如 with &lt;)。否则您的输入文件不是有效的 XML,您必须向其创建者投诉任何后续问题。


推荐阅读