java - 我如何从 CLASSPATH 中引用 XSD 来验证我的 XML?

标签 java xml xsd xerces xalan

作为我的 XML 转换(使用 XSL)的一部分,我正在为模式位置创建一个属性,以便可以验证转换的结果。但是,当我试图将其作为独立测试运行时,我希望能够为模式位置设置适当的属性/值,使其脱离我的 CLASSPATH。

经过一些谷歌搜索后,我尝试了各种 schemaLocation 属性,最新的尝试是:

..
<xsl:attribute name="xsi:external-noNamespaceSchemaLocation">
  <xsl:value-of select="$schemaLocation"/>
</xsl:attribute>
..

转换后的结果是:

<?xml version="1.0" encoding="UTF-8"?>
<emrException 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:external-noNamespaceSchemaLocation="emrException_1_0.xsd">
    ..
    <!-- more well-formed XML -->
</emrException>

我仔细检查过 validator 运行时我的 emrException_1_0.xsd 文件是否在 CLASSPATH 中。这是一个 DOM validator ,我使用的是 Xerces 2.9.1/Xalan 2.7.1,我得到的结果是:

Caused by: org.xml.sax.SAXParseException: 
    cvc-elt.1: Cannot find the declaration of element 'emrException'.

但是,当我切换到使用从文件系统或外部 URL 读取 XSD 文件的模式位置时, validator 运行起来很有趣。

如何从我的 CLASSPATH 中读取 XSD?

最佳答案

一种方法是实现您自己的 LSResourceResolver 和 LSInput,以便可以根据需要解析传入的 systemId。

关于java - 我如何从 CLASSPATH 中引用 XSD 来验证我的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831983/

相关文章:

java - Groovy:如何定义带参数的 java 可调用对象并使其可用于 groovy shell?

xml - 如何验证 xml 文件在 sh 或 bash 中是否有效?

c# - 容错 XML 阅读器

XSD 文件的 XML::Compile::Schema 错误

java - JAXB XSD namespace 解码返回 null

java - 如何拆分字符串并输出拆分的一部分?

java - 错误 :(56, 0) 原因 : org. gradle.api.tasks.testing.Test_Decolated 无法转换为 java.lang.Class

c# - 有没有办法从 DataContract 导出 XSD 架构

java - Java独立程序如何调用JSP

python - 需要在 Python 中使用 BeautifulSoup 将 XML 文件作为流读取