【问题标题】:validating a schema file in local location with saxparser使用 saxparser 验证本地位置的模式文件
【发布时间】:2011-11-26 20:03:59
【问题描述】:

我在看http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html

您可以通过 2 种方式将 xml 文件与架构关联,在应用程序中或在 xml 文档中。在您调用的应用中

saxParser.setProperty(JAXP_SCHEMA_SOURCE,
    new File(schemaSource)); 

在xml中添加这个

<documentRoot
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation='YourSchemaDefinition.xsd'
>

问题在于 .xsd 文件的两个位置都是 URL 字符串。我拥有的 .xsd 文件是本地副本。有没有办法指定位置?也许作为输入流?

【问题讨论】:

标签: java xml saxparser


【解决方案1】:

您可以直接在 SAX 解析器工厂上设置模式。

 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 文件应该可以工作。

【讨论】:

    【解决方案2】:

    我假设你在 java 中。如果架构在类路径中,您可能可以使用这篇文章来获取它:URL to load resources from the classpath in Java

    如果您从第三方接收 XML 文件,则在实例中包含 schemaLocation 可能会难以处理。 schemaLocation 可能已经在 XML 中定义,并可能导致错误的模式(或根本没有)。如果您想以编程方式添加它,则必须在验证之前更改数据的完整性,这可能会有风险。为了验证,IMO 最好信任您的本地副本。

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 2021-03-12
      • 2012-10-24
      • 2019-05-07
      • 2018-12-06
      • 2013-02-11
      相关资源
      最近更新 更多