【问题标题】:Validate XML without having a specific XSD在没有特定 XSD 的情况下验证 XML
【发布时间】:2014-11-04 10:50:19
【问题描述】:

我在使用XMLInputFactory 创建XMLStreamReader 时尝试验证(有效的xml 文件)xml。

我知道可以在工厂javax.xml.stream.isValidating 中设置属性以允许特定实现验证(在我的xml 情况下)。但我正在使用 java 6 build 43(Jboss eap 6.0)并且无法更新,所以这对我不起作用(kwnon 问题)。

因此,如果有人知道任何 API(StAX 除外)可以做同样的事情,那就太好了! 如果有什么不清楚的地方请告诉我。

【问题讨论】:

  • 很不清楚你在问什么。对于初学者来说,验证总是针对某种模式(XSD、RELAX、Schematron 等)。关于valid XMLwell-formed XML的区别,建议大家阅读this。谢谢。
  • 你说得对 Ashes 。我的意思是格式良好的 xml 文件。例如,当我用 firefox 打开一个格式不正确的 xml 文件时,它会显示一个错误(例如 XML Parsing Error)。

标签: java xml validation


【解决方案1】:

找到它,我使用 api SAX 使用提供的 SAXParserFactory 创建解析器(独立于 xsd 模式)并解析文件。 (更多详情可以在http://apiacoa.org/publications/teaching/xml/api-xml.pdf的页面(23/24)上找到)

另外,不要忘记在使用解析器解析输入流之前/之后标记/重置输入流(如果 xml 文件格式不正确,则会引发异常),以便在解析时保持原样不会失败。

【讨论】:

    【解决方案2】:

    您可以尝试 IBM validation API 的 java xml 验证 API 你可以使用javax.xml.validationjavax.xml.validation

    前:

    import javax.xml.XMLConstants;
    import javax.xml.transform.Source;
    import javax.xml.transform.stream.StreamSource;
    import javax.xml.validation.*;
    ...
    
    URL schemaFile = new URL("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd");
    Source xmlFile = new StreamSource(new File("web.xml"));
    SchemaFactory schemaFactory = SchemaFactory
        .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = schemaFactory.newSchema(schemaFile);
    Validator validator = schema.newValidator();
    try {
      validator.validate(xmlFile);
      System.out.println(xmlFile.getSystemId() + " is valid");
    } catch (SAXException e) {
      System.out.println(xmlFile.getSystemId() + " is NOT valid");
      System.out.println("Reason: " + e.getLocalizedMessage());
    }
    

    已编辑:

    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    
            File schemaFile = new File("schema.xsd");
    
            Schema xsdScheme = factory.newSchema(schemaFile);
    
            Validator validator = xsdScheme.newValidator();
    
            Source source = new StreamSource(xmlfile);
    
            validator.validate(source);
    

    我在 SO xsd validation 上找到的一个链接

    【讨论】:

    • 他问“没有特定的 XSD”,但你提供了一个特定 XSD 的答案 (http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2011-04-18
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多