java如何检验xsd规范的xml文档,高分相送
java如何检验xsd规范的xml文档,高分相送 问题点数:0、回复次数:9Top
1 楼winzhen(haha)回复于 2003-12-03 15:59:13 得分 0
/** 使用Apache Xerces解析器 */
org.apache.xerces.parsers.DOMParser mParser =
new org.apache.xerces.parsers.DOMParser();
/** 构造函数 */
// 告诉解析器验证并解析文档
try {
mParser.setFeature( "http://xml.org/sax/features/validation",
true);
}
catch (SAXException e) {
System.out.println("Error setting validation on parser:");
e.printStackTrace();
}
Top
2 楼michoal(michoal)回复于 2003-12-03 16:54:01 得分 0
我现在有这样几个文件
WellFormed.xsd
<?xml version="1.0" ?>
<xs:schema targetNamespace="WellFormed"
xmlns="WellFormed"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="qualified">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
WellFormed.xml
<?xml version="1.0" encoding="utf-8"?>
<x:Test xmlns:x="WellFormed">
<x:Name>John Doe</x:Name>
<x:temp/>
</x:Test>
这里WellFormed.xml中的x:temp是没有定义的,我希望能检验出来
Top
3 楼michoal(michoal)回复于 2003-12-03 17:01:13 得分 0
我写了一段程序
public boolean parse(String file) {
boolean bParser = false;
DOMParser parser = new DOMParser();
try {
parser.setFeature("http://xml.org/sax/features/validation", true);
parser.setFeature(
"http://apache.org/xml/features/validation/schema", true);
parser.setFeature("http://xml.org/sax/features/namespaces", true);
parser.setProperty(
"http://apache.org/xml/properties/schema/external-schemaLocation",
"WellFormed file:///E:/xml/WellFormed.xsd");
parser.parse(file);
bParser = true;
} catch (org.xml.sax.SAXNotRecognizedException e) {
e.printStackTrace();
} catch (org.xml.sax.SAXNotSupportedException e) {
e.printStackTrace();
} catch (org.xml.sax.SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bParser;
}
希望如果解析正确就返回true,否则返回false,但是不好用,只有一个提示信息,没有错误捕捉的,错误信息如下:
[[Error] WellFormed.xml:4:11: cvc-complex-type.2.4.d: Invalid content starting with element 'x:temp'. No child element is expected at this point.
希望大家多多帮忙才是Top
4 楼winzhen(haha)回复于 2003-12-03 17:04:17 得分 0
这样我就不是很清楚了
不过可以看看ibm developworks xml专区的在线教程:Xerces-Java 2 中的 XML Schema 验证
链接为:
http://www-900.cn.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle/D081A7C970B335BFC8256C3A00211A1F?OpenDocument
搞清楚后也告诉我一下Top
5 楼michoal(michoal)回复于 2003-12-03 18:53:57 得分 0
实现ErrorHandler自己捕捉异常Top
6 楼michoal(michoal)回复于 2003-12-04 15:43:29 得分 0
upTop
7 楼levinling()回复于 2003-12-05 16:30:23 得分 0
就是实现ErrorHandler自己捕捉异常Top
8 楼netramper(过山风)回复于 2003-12-08 16:27:46 得分 0
我用JAXP做了一下。
两种解决思路:
1.处理Exception.两种实现办法:一种是实现ErrorHandler接口另一种是继承DefaultHandler.
2.不处理Exception.直接使用DefaultHandler,然后判断返回的Document节点是否为空。在使用JAXP时,上面的例子将返回null.Top
9 楼michoal(michoal)回复于 2004-01-16 13:17:22 得分 0
请大家集思广益Top




