快速验证XML /确定破碎点的方法

时间:2009-07-17 10:12:08

标签: xml

我从Excel获得了一个大型(90MB)XML文件,以XML Spreadsheet 2003格式保存。它包含各种无效数据,因此Firefox会发出如下消息:

Line Number 790402, Column 65:
<Cell ss:StyleID="s18"><Data ss:Type="String">Here's some data I&#5;?Bnternational</Data></Cell>

是否有一种工具可以解析我的XML并以类似于Firefox的方式告诉我它有什么问题? Firefox解析它的速度很慢(可能是因为它将所有内容保存在内存中,可以渲染成一个漂亮的可导航树)。我并不打算对XSD进行验证,只是想知道XML是否格式正确。

6 个答案:

答案 0 :(得分:41)

有一个名为xmllint的linux命令对此有好处。它速度非常快,可以在没有barfing的情况下处理好文件,并提供有用的验证错误消息。

答案 1 :(得分:11)

简化了另一个答案:

python -c "import sys, xml.dom.minidom as d; d.parse(sys.argv[1])" FILE

答案 2 :(得分:3)

您可以使用其他语言的功能。例如,Python中的双线程:

import xml.dom.minidom as dom
dom.parse ('test.xml')

这将显示问题,并且非常高效。我记得有一个XML工具包在bash中运行得很好,但我现在找不到链接。

干杯,

修改: This question's answer建议使用SAX over dom,因为它性能更高。随时可以使用的Python脚本如下所示:

#!/usr/bin/env python
import xml.sax as sax
parser = sax.make_parser ()
parser.parse (open ('test.xml'))

编辑2:我再次记住,该工具是XMLStarlet。当我两年前使用它时,我发现它非常好。

答案 3 :(得分:2)

我总是推荐XML Starlet命令行实用程序。

它们直接从命令行提供验证,查询,格式化,文档编辑,它们对于这类工作非常有价值,或者它们可以通过XPath等方式删除部分。

答案 4 :(得分:1)

CodVerter在线工具提供:

XML Validator
XML to XSD

从Microsoft Excel导出的XML数据的验证: enter image description here

答案 5 :(得分:0)

还有另一个新的(自2013年以来)命令行工具,该工具基于Xerces解析器进行XML Schema验证。它称为xjparse(https://xjparse.org)。到目前为止,我发现该工具运行缓慢,但是是较完整的模式验证器之一,尤其是当您碰巧具有包含/导入其他xsd的xsd时。它似乎也可以在大多数流行的Linux发行版中找到。