日期:2014-05-20  浏览次数:20786 次

求高手路过,用java根据xsd验证xml问题
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 才能让代码验证通过。求高手指导一下
------最佳解决方案--------------------
<aac001>3001415722</aac001>
<aac002>54xxx965070xx20</aac002>

这地方里面2个值类型和你定义的xsd 值不匹配啊。。
第一行超出int超出int类型取值范围,
第二行值明显不是long类型数据值

------其他解决方案--------------------