求高手路过,用java根据xsd验证xml问题

snzke 2012-04-17 02:55:42
java端验证代码:

/**
* validateXML
* @param xsdPath 传入验证文件
* @param xmlData 传入验证内容
* @return
*/
public static boolean validateXML(String xsdPath,String xmlData){
// 建立schema工厂
SchemaFactory schemaFactory = SchemaFactory
.newInstance("http://www.w3.org/2001/XMLSchema");

// 建立验证文档文件对象,利用此文件对象所封装的文件进行schema验证
File schemaFile = new File(xsdPath);

// 利用schema工厂,接收验证文档文件对象生成Schema对象
Schema schema = null;
try {
schema = schemaFactory.newSchema(schemaFile);
} catch (SAXException e) {
e.printStackTrace();
}

// 通过Schema产生针对于此Schema的验证器,利用schenaFile进行验证
Validator validator = schema.newValidator();

// 得到验证的数据源
Source source = new StreamSource(String2InputStream(xmlData));

// 开始验证,成功输出success!!!,失败输出fail
// 参数还可以用文件的String转为的inputstreamnew
// //ByteArrayInputStream(text.getBytes("UTF-8"));
try {
validator.validate(source);
}catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
return false;
}
return true;
}


xsd规则文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="List" type="ListType"/>
<xs:complexType name="ListType">
<xs:sequence>
<xs:element type="DomainType" name="Domain"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DomainType">
<xs:sequence>
<xs:element type="xs:int" name="aac001"/>
<xs:element type="xs:long" name="aac002"/>
<xs:element type="xs:string" name="aac003"/>
</xs:sequence>
</xs:complexType>
</xs:schema>


xml数据文件代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<List>
<Domain xsi:type="person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<aac001>3001415722</aac001>
<aac002>54xxx965070xx20</aac002>
<aac003>我靠靠</aac003>
</Domain>
</List>


根据上述代码进行验证Xml时报出异常:

Cannot resolve 'person' to a type definition for element 'Domain'.

找了半天不知道怎样定义xsd 才能让代码验证通过。求高手指导一下
...全文
302 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
snzke 2012-11-14
  • 打赏
  • 举报
回复
嘿嘿,问题解决了,谢谢楼上的两位师兄
zj84604741 2012-06-26
  • 打赏
  • 举报
回复
<aac001>3001415722</aac001>
<aac002>54xxx965070xx20</aac002>

这地方里面2个值类型和你定义的xsd 值不匹配啊。。
第一行超出int超出int类型取值范围,
第二行值明显不是long类型数据值
MultiArrow 2012-06-26
  • 打赏
  • 举报
回复
xsi:type="person"出现的有点奇怪,改成这样试试:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Domain >
<aac001>3001415722</aac001>
<aac002>54xxx965070xx20</aac002>
<aac003>我靠靠</aac003>
</Domain>
</List>
snzke 2012-04-17
  • 打赏
  • 举报
回复
validateXML方法中还用到了 一个 String2InputStream方法 ,代码如下:


/**
* 将字符串转换为流对象
* @param str 需要装的字符串
* @return 返回流对象
* @since CodingExample Ver(编码范例查看) 1.1
*/
private static InputStream String2InputStream(String str){
ByteArrayInputStream stream =null;
try {
stream = new ByteArrayInputStream(str.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stream;
}

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧