XML模式(XSD)验证工具?

在办公室,我们目前正在编写一个应用程序,它将根据给定的模式生成XML文件。我们在. xsd文件中拥有模式。

是否有工具或库可以用于自动测试,以检查生成的XML是否与模式匹配?

我们更喜欢适合商业用途的免费工具,尽管我们不会捆绑模式检查器,因此它只需要在开发过程中供开发人员使用。

我们的开发语言是c++,如果这有什么不同的话,尽管我不认为它应该,因为我们可以生成xml文件,然后通过在测试中调用一个单独的程序来进行验证。

295157 次浏览

xmlstarlet是一个命令行工具,它可以执行以下操作:

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
-w or --well-formed        - validate well-formedness only (default)
-d or --dtd <dtd-file>     - validate against DTD
-s or --xsd <xsd-file>     - validate against XSD schema
-E or --embed              - validate using embedded DTD
-r or --relaxng <rng-file> - validate against Relax-NG schema
-e or --err                - print verbose error messages on stderr
-b or --list-bad           - list only files which do not validate
-g or --list-good          - list only files which validate
-q or --quiet              - do not list files (return result code only)


NOTE: XML Schemas are not fully supported yet due to its incomplete
support in libxml2 (see http://xmlsoft.org)


XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

在你的情况下,用法应该是这样的:

xmlstarlet val --xsd your_schema.xsd your_file.xml

经过一些研究,我认为最好的答案是Xerces,因为它实现了XSD的所有功能,是跨平台的,并且被广泛使用。我已经使用默认的JRE解析器(通常是Xerces)创建了一个在github上的小型Java项目来从命令行验证。这可以在Windows/Mac/Linux上使用。

还有一个Xerces的c++版本可用,如果你更愿意使用它。StdInParse效用可用于从命令行调用它。同样,下面的注释指向这个更完整的包装实用程序

你也可以使用xmllint,它是libxml的一部分。您很可能已经安装了它。使用示例:

xmllint --noout --schema XSD_FILE XML_FILE

一个问题是libxml并没有实现所有的规范,所以你可能会遇到问题:(

或者,如果你是在Windows上,你可以使用msxml,但你需要某种包装器来调用它,比如这个以文章中描述的GUI。然而,似乎Windows上的大多数人都使用XML编辑器,例如notepad++(如内特的回答中所述)或XML记事本2007 as 史蒂夫建议(还有一些商业编辑器,我在这里不提)。

最后,你会发现,不幸的是,不同的程序会给出不同的结果。这主要是由于XSD规范的复杂性。您可能希望使用几种工具来测试您的模式。

更新:我在博客中对此进行了扩展。

http://www.xmlvalidation.com/

(请务必勾选“验证外部XML模式”框)

来自DecisionSoft的在线XML模式验证器允许你根据给定的模式检查XML文件。

notepad++有一个名为XML工具的插件,它提供针对XSD的XML验证和验证。

你可以看到如何使用它在这里

可以在http://www.xml-buddy.com找到一个用于快速简单的XML验证的XML编辑器

您只需要运行安装程序,然后就可以使用易于使用的桌面应用程序或命令行验证XML文件。此外,您还可以获得Schematron和RelaxNG的支持。批处理验证也支持…

2012年1月13日更新:命令行工具可以免费使用,并使用Xerces作为XML解析器。

对于Windows,有免费的XML记事本2007。 您可以选择XSD,以便对

进行验证

更新:更好的是,使用notepad++和XML Tools插件

我只是在学习图式。我使用RELAX NG和使用xmllint来验证。我对xmllint中出现的错误感到沮丧。我希望他们能提供更多信息。

如果XML中有错误的属性,那么xmllint会告诉您不受支持的属性的名称。但是,如果XML中缺少某个属性,则会收到一条消息,说该元素无法验证。

我正在处理一些具有非常复杂规则的非常复杂的XML,而且我是新手,因此追踪缺少哪个属性花费了很长时间。

更新:我刚刚发现了一个我很喜欢的java工具。它可以像xmllint一样从命令行运行,并且它支持RELAX NG: https://msv.dev.java.net/

我倾向于使用Microsoft的xsd来帮助从. net文件生成xsd。我还使用xmlstarlet解析出xml的各个部分。最后一个对您有用的免费工具是altovaxml,可以通过以下URL获得:http://www.altova.com/download_components.html

这允许我通过解析xml来扫描所有的xml文件,选择要使用的xsd。

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
do
local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
if [ $? -ne 0 ]; then
printf "Failed to verify: "
cat ~/temp.txt | tail -1 | tr -d '\r'
printf "    - $FILENAME with $SchemaFile\n"
fi
done
}

生成xml我使用: .dll /type:CFGCLASS &重命名schema0。xsd CFGCLASS.xsd < / p >

获得xsd的名称,我使用: xmlstarlet sel - t - m / XXX / * - v本地名称()$ 1 | sed ' s / $ / / < / p >

这允许我使用xml文件中的元素标记拾取正确的XSD。

最终结果是,我可以调用一个bash函数来扫描所有XML文件并验证它们。即使它们在多个子目录中。

我发现这个来自“corefile”的在线验证器非常有用-
http://www.corefiling.com/opensource/schemaValidate.html < / p >

在尝试了一些工具来验证我的xsd之后,这个工具为我提供了详细的错误信息——所以我能够在模式中修复错误。

IntelliJ IDEA是一个很好的从XML验证和生成XSD的可视化工具,直观而简单。

您可以将XML模式连接到Microsoft Visual Studio的智能感知。这个选项为您提供了实时验证和自动完成,这真是太棒了。

我在免费的Microsoft Visual c++ 2010 Express上运行了这个场景。

另一个在线XML模式(XSD)验证器:http://www.utilities-online.info/xsdvalidation/