2010-11-18 57 views
4

是否可以使用xmlschéma中的某些規則檢查java對象中的值?使用xml模式檢查java值

例如,我有一個String txt = "blablabla",我應該驗證它是否可以用於<xs:element name="foo" type="string32"/>,string32限制爲32 caract。最大長度

可能嗎?如果使用xml模式和jaxb不可能,是否還有其他可能的模式語言?

謝謝。

回答

2

你可以做到以下幾點:

import java.io.File; 
import javax.xml.XMLConstants; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.util.JAXBSource; 
import javax.xml.validation.Schema; 
import javax.xml.validation.SchemaFactory; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = sf.newSchema(new File("customer.xsd")); 

     JAXBContext jc = JAXBContext.newInstance(Customer.class); 

     Customer customer = new Customer(); 
     // populate the customer object 
     JAXBSource source = new JAXBSource(jc, customer); 
     schema.newValidator().validate(source); 
    } 

} 

有關更詳細的例子中看到:

1

您必須將Java對象映射到xml,然後將該對象編組爲xml,然後將xml提供給進行模式驗證的解析器。編寫代碼來解析xml模式並讀取模式可能會更好,然後使用模式信息爲您的對象構建驗證器。這樣你就不必將你的對象放到xml中來驗證它。

+1

對我來說似乎是一年級生的工作!有沒有一個庫來做到這一點,或者你能提供一個簡單的例子嗎?謝謝。 – Istao 2010-11-18 20:02:06

+1

查看我的回答如何使用javax.xml.validation庫完成此操作:http://stackoverflow.com/questions/4218935/checking-a-java-value-with-an-xml-schema/4219090#4219090 – 2010-11-18 20:11:42