【发布时间】:2015-09-28 08:36:59
【问题描述】:
我正在尝试为我们公司的 XSD 设置一个产品,以针对这些 XSD 验证一堆 XML 文件。
我们的项目是基于 maven 的,我使用 ant 脚本生成目录文件(这使得将所有这些模式添加到 eclipse 实例中变得更加容易)。
我遇到的问题是,我无法设置一个 maven 或 ant 任务,通过使用 XML 目录来针对这些模式验证一堆示例 xml 文件。我不想为所有这些模式明确定义 URN 到 XSD 规则(这就是我使用 XML Catalg 的目的)。
我尝试了以下设置:
Maven
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<catalogs>
<catalog>${project.build.outputDirectory}/catalog.xml</catalog>
</catalogs>
<validationSets>
<validationSet>
<dir>src/test/xml</dir>
<validating>true</validating>
</validationSet>
</validationSets>
</configuration>
</plugin>
这无法解析catalog.xml。基础 catalog.xml 包含未正确展开的相对 nextCatalog 条目(绝对路径错误)。当我直接将2个catalog.xml条目添加到pom时,只解析第一个。
但是即使只解析了第一个catalog.xml文件也无法验证xml文件:
line 4, column 191: cvc-elt.1: Cannot find the declaration of element 'mtc:SERVICE_ORDER_MSG'.
示例 XML 文件是有效的,因此显然 maven 没有将通过目录加载的模式与验证器链接。使用 -X 我确实看到它处理目录并看到模式及其命名空间。
蚂蚁
使用 ant 我尝试了以下设置(尝试了互联网上的各种建议):
<target name="test">
<schemavalidate warn="true" failonerror="true" fullchecking="true">
<fileset dir="src/test/xml">
<include name="ASN_207a44e3-0aeb6cd8-551ffcc2-2ca1409a.xml" />
</fileset>
<xmlcatalog>
<classpath>
<pathelement location="resolver.jar" />
<pathelement location="ant-apache-resolver-1.8.4.jar" />
</classpath>
<xmlcatalog>
<catalogpath>
<pathelement location="target/classes/MTC/catalog.xml" />
</catalogpath>
</xmlcatalog>
</xmlcatalog>
</schemavalidate>
</target>
在这种情况下,我没有得到目录文件被解析的迹象。我只得到意外元素的错误。当我将 ant 脚本更改为直接使用架构文件时,它可以工作,但这不是我想要的设置。
【问题讨论】:
标签: xml ant xsd maven-3 xml-validation