处理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-----------------------
XML Schema验证
本文介绍如何使用JDOM结合Schema验证XML文档。针对不同情况(是否带有命名空间),提供了具体的代码示例,确保XML文档符合预定义的格式规范。
2528

被折叠的 条评论
为什么被折叠?



