电脑里光有仓老师还是不行的,你必须需要播放器,这样才能欣赏苍老师的曼妙身姿,Spring兄则是通过DocumentLoader来加载D:\canglaoshi.xml的。
public interface DocumentLoader {
/**
* 提供了一个接口,让我们访问苍老师,InputSource,EntityResolver,ErrorHandler都是jdk自带解析xml的
*/
Document loadDocument(
InputSource inputSource, EntityResolver entityResolver,
ErrorHandler errorHandler, int validationMode, boolean namespaceAware) throws Exception ;
}
上面四个参数都是什么意思呢?ErrorHandler,是设置出错了怎么办,比如你惹妹子生气了,你要怎么挽回,最合理的方式是知道妹子为啥生你气,然后在采取相应的行动。validationMode 这个是验证元素的属性是否正确,比如妹子脸上长胡子肯定不合理吧,namespaceAware,设置命名空间,保证元素不冲突,在中国,女生叫小花的人海了去了,但是你如果说某某地方的小花就能确定小花是哪个妹子。
<!DOCTYPE contacts SYSTEM "contacts.dtd">
<contacts xsi:schemaLocation="小花验证.xsd"
xmlns:xsi="http://中国深圳市某某中学某某班">
<小花 脸="不长胡子">
</小花>
</contacts>
Spring兄还是非常不错的,它提供了一个默认的实现去加载D:\canglaoshi.xml,这个实现直接使用jdk中解析xml的类库,如果你觉得jdk的实现很low,你可以自己去实现读取xml的方法。
public class DefaultDocumentLoader implements DocumentLoader {
/**
* JAXP attribute used to configure the schema language for validation.
*/
private static final String SCHEMA_LANGUAGE_ATTRIBUTE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
/**
* JAXP attribute value indicating the XSD schema language.
*/
private static final String XSD_SCHEMA_LANGUAGE = "http://www.w3.org/2001/XMLSchema";
@Override
public Document loadDocument(InputSource inputSource, EntityResolver entityResolver, ErrorHandler errorHandler,
int validationMode, boolean namespaceAware) throws Exception {
DocumentBuilderFactory factory = createDocumentBuilderFactory(validationMode, namespaceAware);
DocumentBuilder builder = createDocumentBuilder(factory, entityResolver, errorHandler);
// 解析资源,返回Document
return builder.parse(inputSource);
}
/**
* DocumentBuilderFactory创建 DOM解析器的工厂,不能直接实例化,必须通过newInstance方法实例化
*
*/
protected DocumentBuilderFactory createDocumentBuilderFactory(int validationMode, boolean namespaceAware)
throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 开启命名空间
factory.setNamespaceAware(namespaceAware);
if (validationMode != XmlValidationModeDetector.VALIDATION_NONE) {
factory.setValidating(true);
if (validationMode == XmlValidationModeDetector.VALIDATION_XSD) {
// Enforce namespace aware for XSD...
factory.setNamespaceAware(true);
try {
//设置验证的SCHEMA方式为XSD
factory.setAttribute(SCHEMA_LANGUAGE_ATTRIBUTE, XSD_SCHEMA_LANGUAGE);
}
catch (IllegalArgumentException ex) {
ParserConfigurationException pcex = new ParserConfigurationException(
"Unable to validate using XSD: Your JAXP provider [" + factory +
"] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? " +
"Upgrade to Apache Xerces (or Java 1.5) for full XSD support.");
pcex.initCause(ex);
throw pcex;
}
}
}
return factory;
}
/**
* DocumentBuilder可以用来解析xml文件
*
*/
protected DocumentBuilder createDocumentBuilder(
DocumentBuilderFactory factory, EntityResolver entityResolver, ErrorHandler errorHandler)
throws ParserConfigurationException {
DocumentBuilder docBuilder = factory.newDocumentBuilder();
if (entityResolver != null) {
docBuilder.setEntityResolver(entityResolver);
}
if (errorHandler != null) {
docBuilder.setErrorHandler(errorHandler);
}
return docBuilder;
}
感觉好简单啊,大家不了解的直接请教一下百度咯