代码之家  ›  专栏  ›  技术社区  ›  Jason Dagit

XML模式(XSD)验证工具?[关闭]

  •  274
  • Jason Dagit  · 技术社区  · 18 年前

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

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

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

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

    14 回复  |  直到 10 年前
        1
  •  247
  •   Community Mohan Dere    9 年前

    经过一番研究,我认为最好的答案是 Xerces 由于它实现了所有XSD,因此是跨平台的,并且被广泛使用。我创建了一个 small Java project on github 使用默认的JRE解析器(通常是Xerces)从命令行进行验证。这可以在Windows/Mac/Linux上使用。

    还有一个 C++ version of Xerces 如果你愿意使用它,可以使用。这个 StdInParse utility 可用于从命令行调用它。此外,下面的一位评论者指出了这一点 more complete wrapper utility .

    您还可以使用xmllint,它是 libxml 。您很可能已经安装了它。示例用法:

    xmllint --noout --schema XSD_FILE XML_FILE
    

    一个问题是libxml没有实现所有的规范,因此您可能会遇到问题:(

    或者,如果您使用的是Windows,则可以使用 msxml ,但您需要某种包装器来调用它,例如本文中描述的GUI DDJ article 然而,似乎大多数Windows用户都使用XML编辑器,如Notepad++(如中所述 Nate's answer )或 XML Notepad 2007 suggested by SteveC (还有几位商业编辑,我在这里不提)。

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

    更新 :我在a中对此进行了扩展 blog post .

        2
  •  114
  •   Derek Mahar    10 年前

    有一个插件 Notepad++ 叫做 XML Tools 它提供针对XSD的XML验证和确认。

    你可以看到如何使用它 here .

        3
  •  22
  •   Charles Duffy    10 年前

    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
    
        4
  •  17
  •   SteveC    7 年前

    对于Windows,有免费的 XML Notepad 2007 . 您可以选择XSD进行验证

    更新:更好的是,使用Notepad++和XML工具插件

        5
  •  5
  •       17 年前

    在线 XML Schema Validator DecisionSoft允许您根据给定的模式检查XML文件。

        6
  •  3
  •   John    18 年前
        7
  •  3
  •   inutan    14 年前

    我正在学习Schema。我使用RELAXNG和xmllint进行验证。我对xmlllint出现的错误感到沮丧。我希望他们能提供更多信息。

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

    我正在研究一些非常复杂的XML,其中包含非常复杂的规则,而且我是新手,所以追踪丢失的属性需要很长时间。

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

        8
  •  2
  •   Helper Helper    17 年前

    我发现这个来自“核心归档”的在线验证器非常有用-
    http://www.corefiling.com/opensource/schemaValidate.html

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

        9
  •  2
  •   Pengo    15 年前

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

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

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

        10
  •  2
  •   Clemens    12 年前

    http://www.xmlvalidation.com/

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

        11
  •  1
  •   Otto    13 年前

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

        12
  •  1
  •   AaronDanielson    11 年前

    您可以将XML架构连接到Microsoft Visual Studio的Intellisense。此选项为您提供了实时验证和自动完成功能,这真是太棒了。

    我在免费的Microsoft Visual C++2010学习版上运行了这个场景。

        13
  •  1
  •   Ignacio Corral Campos    11 年前

    我倾向于使用Microsoft的xsd来帮助从a生成xsd。NET文件。我还使用xmlstarlet解析出xml的各个部分。最后一个对你有用的免费工具是altovaxml,它可以在以下网址找到: 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: xsd DOTNET.dll/类型:CFGCLASS&;重命名schema0.xsd CFGCLASS.xsd

    要获取我使用的xsd名称: xmlstarlet sel-t-m/XXX/*-v local-name()$1|sed's/$//

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

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

        14
  •  0
  •   Andrew Stern    14 年前

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