基于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-----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值