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

作为我的 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>

我已经仔细检查过,当验证程序运行时,我的emrException_1_0.xsd文件明显位于CLAsspATH中.它是一个DOM验证器,我使用的是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文件的架构位置时,验证器运行很有趣.

如何从CLAsspATH中读取XSD?

解决方法

一种方法是实现自己的LSResourceResolver和LSInput,这样传入的systemId就可以解析了.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...