jvh*_*she 17 java xml xml-validation xml-parsing
目前,我正在开发一项功能,涉及解析从另一个产品收到的XML.我决定对一些实际的客户数据进行一些测试,看起来其他产品允许来自用户的输入被认为是无效的.无论如何,我仍然需要尝试找出解析它的方法.我们正在使用javax.xml.parsers.DocumentBuilder
,我收到的输入错误如下所示.
<xml>
...
<description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description>
...
</xml>
Run Code Online (Sandbox Code Playgroud)
正如您所知,描述中的内容似乎是无效的标记(<THIS-IS-PART-OF-DESCRIPTION>
).现在,已知此描述标记是叶标记,并且不应在其中包含任何嵌套标记.无论如何,这仍然是一个问题,并产生例外DocumentBuilder.parse(...)
我知道这是无效的XML,但它可以预测无效.有关解析此类输入的方法的任何想法?
kjh*_*hes 21
那个"XML"比无效更糟糕- 它没有很好的形成 ; 看看Well Formed vs Valid XML.
对违法行为可预测性的非正式评估无济于事.该文本数据不是XML.没有符合要求的XML工具或库可以帮助您处理它.
使用容错标记解析器在解析为XML之前清除问题:
独立: xmlstarlet具有强大的恢复和修复功能:RomanPerekhrest
xmlstarlet fo -o -R -H -D bad.xml 2>/dev/null
Run Code Online (Sandbox Code Playgroud)Standalone和C: HTML Tidy也适用于XML.
codecs.EncodedFile()
清除非法字符.FilterInputStream
可用于预处理清理..净:
可以禁用XmlReaderSettings.CheckCharacters以通过非法的XML字符问题.
@jdweng报告说XmlReaderSettings.ConformanceLevel
有时可以用来工作,围绕XML语法的问题,但在下面的第3注违规警告.
ConformanceLevel.Fragment
据说是"容错".使用文本编辑器手动处理数据或使用字符/字符串函数以编程方式处理数据.以编程方式执行此操作的范围可能从棘手到不可能,因为看似可预测的通常不是 - 规则中断很少受规则约束.
XmlReader
XmlReader.ReadToFollowing()
Microsoft.Language.Xml.XMLParser
对于&符号,使用正则表达式替换匹配preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $s);
:credit:blhsin,demo
&(?!(?:#\d+|#x[0-9a-f]+|\w+);)
Run Code Online (Sandbox Code Playgroud)请注意,上述正则表达式不会考虑注释或CDATA部分.
归档时间: |
|
查看次数: |
10524 次 |
最近记录: |