基于jdom实现xml的schema验证

处理xml数据之前,我们希望提供给我们处理的xml文档是可用的,符合我们要求的数据要求的格式,而这个如何做到呢,使用schema来验证xml文档是一个比较简单可行的方法。

下面是jdom验证通过schema验证xml的几行代码。

 

//通过设置参数为true来指明读进的xml文档需要验证

SAXBuilder builder = new SAXBuilder(true);

//指定约束方式为XML schema 
builder.setFeature("http://apache.org/xml/features/validation/schema", true);

//设置初始化参数
String xsdFile = getClass().getClassLoader().getResource("test-config.xsd").toString();

builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
    xsdFile);

 以上代码验证xml没有带命名空间的没有问题。

当如果xml带有命名空间则在验证的时候会抛出异常

org.jdom.input.JDOMParseException: Error on line 4: cvc-elt.1: Cannot find the declaration of element 'ivdr:configuration'.
 at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
 at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
 at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
 at com.suntek.ivdr.loader.ContextLoader.loadContext(ContextLoader.java:36)
 at com.suntek.ivdr.loader.ContextLoader.main(ContextLoader.java:76)

 

 需要修改如下:

//-----------xml带有命名空间的验证 begin--------------------------

//通过设置参数为true来指明读进的xml文档需要验证

SAXBuilder builder = new SAXBuilder(true);

//指定约束方式为XML schema 
builder.setFeature("http://apache.org/xml/features/validation/schema", true);

//设置初始化参数

String xsdNamespace = "http://ivdr.suntektech.com";
String xsdFile = getClass().getClassLoader().getResource("test-config.xsd").toString();

builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
    xsdNamespace + " " + xsdFile);

//------------xml带有命名空间的验证 end-----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值