使用saxparser验证本地位置的模式文件

时间:2011-11-26 20:04:00

标签: java xml saxparser

我在看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文件是本地副本。有没有办法指定位置?也许作为输入流?

2 个答案:

答案 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,更好地信任您的本地副本。