java - < 字符的 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 解决:附加字符方法并仅在元素末尾设置结果!
解决方案
“小于”字符<
未转义,因此 XML 无效。
请参阅W3C XML 定义中的第 2.4 节:
& 符号 (&) 和左尖括号 (<) 不得以其文字形式出现,除非用作标记分隔符,或者在注释、处理指令或 CDATA 部分中。如果在其他地方需要它们,它们必须分别使用数字字符引用或字符串“&”和“<”进行转义。
或者,用 RegEx 术语:
CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
因此,您必须转义<
以获得有效的 XML(例如 with <
)。否则您的输入文件不是有效的 XML,您必须向其创建者投诉任何后续问题。
推荐阅读
- python - 使用 python 3.x 编写后门程序
- typescript - 在使用 Protractor flake 进行任何失败的测试之前再次运行特定套件
- c# - generic.xaml 中的自定义控件和附加样式
- package - 如何比较 JuliaDB 和 Queryverse 的特性和性能?哪个更好?
- pyspark - 在 PySpark 中,如何对字符串类型的 ID 进行哈希处理并将其转换为小于 365 的整数?
- matlab - 从某一行开始逐列替换值
- cloudera - CDH 6.2 - 添加新主机错误:dpkg-query: no packages found matching cloudera-manager-agent
- java - 在不将十进制转换为科学计数法的情况下将 JSON 转换为 XML
- asp.net-mvc - 安装 Visual Studio Build Tools 2017 时没有“ASP.NET MVC 4”程序集
- html - 如何防止元素绝对位置在css中重叠