作为我的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?
答案 0 :(得分:1)
一种方法是实现自己的LSResourceResolver和LSInput,这样就可以解析传入的systemId,无论你想要什么。