2013-04-02 80 views
3

是否有標準方法來驗證字符串是否符合任何標準xml模式數據類型(請參閱XML Schema Part 2: Datatypes Second Edition或更具體地說Built-in-datatypes)?在Java中驗證字符串對Xml模式數據類型

我不想驗證完整的XSD,我只是想根據XML數據類型驗證一些用戶輸入(例如,針對http://www.w3.org/2001/XMLSchema#datehttp://www.w3.org/2001/XMLSchema#boolean)。有沒有辦法使用標準的API來做到這一點?如果不是,還有其他可能性,而不是從頭開始寫它?

包javax.xml.validation中的類似乎用於驗證完整模式而不是特定數據類型。什麼我試圖做

例子:

String content = "abc"; 
String datatype = "http://www.w3.org/2001/XMLSchema#long"; 
boolean isValid = Validator.isValid(content, datatype); //return false 

回答

1

不是一個標準的API,但Xerces的有XML Scheam API可能會感興趣。在Xerces的你也可以找到數據類型驗證器,使您能夠做到這一點:

import org.apache.xerces.impl.dv.InvalidDatatypeValueException; 
import org.apache.xerces.impl.dv.xs.YearDV; 

public class Main { 

public static void main(String[] args) { 
    try { 
     new YearDV().getActualValue("Notayear", null); 
     System.out.println("OK"); 
    } catch (InvalidDatatypeValueException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

這將打印

cvc-datatype-valid.1.2.1: 'Notayear' is not a valid value for 'gYear'. 

從那裏把它。大量的代碼閱讀!

+0

看起來不錯,但出於性能原因,我寧願選擇不基於拋出和捕獲異常的解決方案。但是,如果沒有其他解決方案建議,我會接受這一個。 – proghammer

0

,你可以做到以下幾點:

public boolean validate(String inputXml, String schemaLocation)throws SaxException, throws IOException { 
// build the schema 
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 
File schemaFile = new File(schemaLocation); 
Schema schema = factory.newSchema(schemaFile); 
Validator validator = schema.newValidator(); 

// create a source from a string 
Source source = new StreamSource(new StringReader(inputXml)); 

// check input 
boolean isValid = true; 
try { 
validator.validate(source); 
} catch (SaxException e) { 
System.err.printlin("Not valid"); 
isValid = false; 
} 

return isValid; 
} 
+0

我想驗證的輸入不是XML,我沒有實際的模式。我只想驗證一個字符串的數據類型,其中數據類型是一個標準的Xml模式數據類型(不是XML模式!)。 – proghammer

+0

你是什麼意思的標準Xml模式數據類型? –

+0

「XML Schema Part 2:Datatypes Second Edition」中提到的內置數據類型。見[http://www.w3.org/TR/xmlschema-2/#built-in-datatypes](http://www.w3.org/TR/xmlschema-2/#built-in-datatypes)。 – proghammer