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

Java针对XSD文件验证XML文件的最佳方法是什么?

裘禄
2023-03-14
问题内容

我正在生成一些需要符合给我的xsd文件的xml文件。验证其符合性的最佳方法是什么?


问题答案:

Java运行时库支持验证。上次我检查的是幕后的Apache Xerces解析器。你可能应该使用javax.xml.validation.Validator

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import java.net.URL;
import org.xml.sax.SAXException;
//import java.io.File; // if you use File
import java.io.IOException;
...
URL schemaFile = new URL("http://host:port/filename.xsd");
// webapp example xsd: 
// URL schemaFile = new URL("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd");
// local file example:
// File schemaFile = new File("/location/to/localfile.xsd"); // etc.
Source xmlFile = new StreamSource(new File("web.xml"));
SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
  Schema schema = schemaFactory.newSchema(schemaFile);
  Validator validator = schema.newValidator();
  validator.validate(xmlFile);
  System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
  System.out.println(xmlFile.getSystemId() + " is NOT valid reason:" + e);
} catch (IOException e) {}

模式工厂常量是http://www.w3.org/2001/XMLSchema定义XSD 的字符串。上面的代码针对URL验证了WAR部署描述符,http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd但你同样可以针对本地文件进行验证。

你不应使用DOMParser来验证文档(除非你的目标仍然是创建文档对象模型)。这将在解析文档时开始创建DOM对象-如果你不打算使用它们,那将很浪费。



 类似资料:
  • 我需要针对给定的XSD文件验证多个XML文件。问题是XSD由两个文件组成。它们是嵌套的,尽管我知道哪个是第一个(其他文件的“父”)。在XML文件中,我使用命名空间来定义子节点在哪个XSD中定义

  • 我想用JAXB创建一个通用的xmlFileValidator,它需要一个XML文件和一个模式文件,如果文件有效,则返回根类的对象,否则抛出SAXExc0019或JAXBExc0019。 } 下一行给出警告- 类型安全性:未选中从对象到JAXBElement的强制转换 而且我也无法映射未签名的对象并将其设置为E obj,这是在参数中传递的。我知道它可以返回,但我被要求将其设置为该参数。请帮忙。提前谢

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

  • 我有一个servlet,它使用打包在.jar存档中的实用程序: 此实用工具获取xml文件流,针对xsd模式执行验证并解析它: xsd文件以: xml文件: Servlet Init方法抛出异常: 如何指定SAXParser在哪里需要xsd模式来验证xml文件? 附注。对不起,我的英语不好 UPD: 我正在尝试添加此属性: UPD2:在xml文件中使用“classpath:appcontext.xs

  • 问题内容: 但是,这将返回一条错误消息:线程“ main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema -instance 指定的模式语言的SchemaFactory。 这是我的代码还是实际的xsd文件有问题? 问题答案: 该错误意味着您安装的Java没有任何可解析XMLSchema文件

  • 我在xsd中有一个问题,我不知道为什么stackoverflow阻止我问。我想有一个看起来像这样的标签 但我还想使用验证来验证这一点。 在xsd中,我有 我可以单独通过语法测试,但当我将验证和xml文件放在一起时,我不断收到错误,说order属性不允许出现在这个标记中。我想使用这个order属性,因为它是必需的。如果有人能告诉我怎么做!非常感谢!