当前位置: 首页 > 面试题库 >

XML验证不会释放xml文件

漆雕奇
2023-03-14
问题内容

我正在尝试针对JAVA中的XSD文件验证XML文件。我的问题不是验证本身,因为这可以正常工作。我的问题是,验证后没有释放XMLfile。如果以后尝试访问该文件,则会收到错误“该文件已被其他资源使用”。

仅当验证失败时才会发生此错误(validator.validate(xmlSource)抛出了一个异常;)如果对文件进行了验证而没有问题,则该文件将被释放并且可以被其他人访问。

有想法吗?

public void validateXMLAgainstXSD(String xmlPath, String xsdPath) throws ParserException, IOException
  {
    Source xmlSource = null;
    File schemaFile = null;
    SchemaFactory schemaFactory = null;
    Schema schema = null;
    Validator validator = null;
    try 
    {
      schemaFile = new File(xsdPath);
      xmlSource = new StreamSource(new File(xmlPath));
      schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      schema = schemaFactory.newSchema(schemaFile);
      validator = schema.newValidator();
      validator.validate(xmlSource);
    }
    catch (SAXException e)
    {
      //_log.error("ParsingDataFile: XML file could not be validated against XSD file: XML File=<", xmlFile.getAbsolutePath(), "> XSD file=<", xsdFile.getAbsolutePath(), ">. Exception=<", e, ">");
      xmlSource = null;
      schemaFile = null;
      schemaFactory = null;
      schema = null;
      validator.reset();
      validator = null;      
      //throw new ParserException(-1, ParserException.ERROR_CODE_XML_NOT_VALID, e);
    }
  }

问题答案:

我的建议是使用带有inputstream的构造函数创建StreamSource。

像那样

 InputStream inputStream = new FileInputStream(new File(xmlPath));
    source = new StreamSource(inputStream);

然后在您的方法中使用finally语句

finally{
inputStream.close();
}

但是请记住要确保在初始化流之前,先进行最终阻塞或通过关闭未初始化或打开的inputStream来捕获异常。



 类似资料:
  • 主要内容:形式良好的 XML 文档,验证 XML 文档,XML DTD,XML Schema,一个通用的 XML 验证器拥有正确语法的 XML 被称为"形式良好"的 XML。 通过 DTD 验证的XML是"合法"的 XML。 形式良好的 XML 文档 "形式良好"的 XML 文档拥有正确的语法。 在前面的章节描述的语法规则: XML 文档必须有一个根元素 XML元素都必须有一个关闭标签 XML 标签对大小写敏感 XML 元素必须被正确的嵌套 XML 属性值必须加引号 <?xml version=

  • 类定义为: 要加载的xml示例部分: 我创建了一个验证收集器,以显示针对架构解封xml文件过程中所有验证错误,但结果令人困惑:验证收集器将继承我的RemoteHost的每个类的验证错误显示为: 元素“host firstsubtype”不能有字符或元素信息项[children],因为该类型的内容类型为空。 元素“Other HostType”必须没有字符或元素信息项[childrens],因为该类

  • 我是XML验证方面的新手,在调用adobe server生成PDF之前,我被要求对XML进行验证。我有以下内容,我们通过对象获取XML,然后调用。如果有任何元素为null或空以停止生成pdf,任何人都可以帮助我一步一步地验证XML吗

  • 我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。 src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 我在验证xml文件时遇到问题。在我的xml文件中,xsi:schemaLocation=“”指向xsd文件。不幸的是,这个xsd文件加载了模式依赖项。他们都指向一些网站。因此,验证失败。所有工具和库都失败,外汇xmlspy。当我指向xml文件中的xsi:schemalocation=“”本地xsd(所有依赖项都是本地的)时,验证工作很好。 我的问题与javax.xml.validation有关,我