我在看http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html。
您可以在应用程序或xml文档中将xml文件与具有2种方式的架构相关联。在应用程序中,您可以调用
saxParser.setProperty(JAXP_SCHEMA_SOURCE,
new File(schemaSource));
在<documentRoot
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='YourSchemaDefinition.xsd'
>
问题是.xsd文件的两个位置都是URL字符串。我拥有的.xsd文件是本地副本。有没有办法指定位置?也许作为输入流?
答案 0 :(得分:1)
您可以直接在SAX Parser工厂设置架构。
SAXParserFactory factory = SAXParserFactory.newInstance();
SchemaFactory schemafactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema sc = schemafactory.newSchema(new File("path to xsd file"));
factory.setSchema(sc);
SAXParser parser = factory.newSAXParser();
parser.parse(file, handler);
xml文件中的xsd位置也可以相对于xml文件,因此如果xsd与本地xml文件一起存在,那么当前的xml文件应该可以工作。
答案 1 :(得分:0)
我假设你在java中。如果架构在类路径中,您可以使用此帖子来获取它:URL to load resources from the classpath in Java
如果从第三方收到XML文件,则实例中的schemaLocation很难处理。 schemaLocation可能已经在XML中定义,可能导致错误的模式(或者根本没有)。如果要以编程方式添加它,则必须在验证之前更改数据的完整性,这可能存在风险。对于验证,IMO,更好地信任您的本地副本。