一、解析mybatis的配置文件
1、加载指定资源路径下的配置文件的方法
(1)Class.getResourceAsStream(resource) resource = "config.xml"
用法如下:你在包com.test.mycode写了一个MyTest类,那么我们可以使用MyTest.class.getResourceAsStream(resource)或Class.class.getResourceAsStream(resource)
此处需要注意:如果资源路径 resource 以 / 开头,那么就会从classpath的根路径下开始查找,即config.xml放在src/main/resources下面也可以被成功加载;

如果资源路径 resource 没有以 / 开头,那么就会从当前类MyTest所在的包com.test.mycode下查找相应的资源,即config.xml必须放在com.test.mycode包下面才能被成功加载

(2)ClassLoader.getResourceAsStream(resource) resource = "config.xml" 注意要查找的资源前面不要带/,会从classpath的根路径下查找

2、DOM解析

class.xml 文件如下 启动定义了java.dtd文件的相对位置 <!DOCTYPE classes SYSTEM "bin//parsers//java.dtd">
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE classes SYSTEM "bin//parsers//java.dtd">
<classes>
<java班 name="CSDNJava01班">
<teachers>
<teacher name="军哥" sex="男" age="28" />
<teacher name="刘丽华" sex="女" age="28" />
</teachers>
<students>
<student id="x121">
<name>王亮</name>
<sex>女</sex>
<age>28</age>
</student>
</students>
</java班>
<!-- 注释0 -->
<net班 name="CSDNNet01班">xxx</net班>
<php班 name="CSDNPhp01班"></php班>
<ios班 name="CSDNIos01班"></ios班>
</classes>
java.dtd文件如下
<!ELEMENT classes (java班,net班,php班,ios班)>
<!ELEMENT java班 (teachers?,students?)>
<!ELEMENT net班 (teachers?,students?)>
<!ELEMENT php班 (teachers?,students?)>
<!ELEMENT ios班 (teachers?,students?)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT teacher EMPTY>
<!ELEMENT students (student*)>
<!ELEMENT student (name,sex,age)>
<!ATTLIST java班 name CDATA #IMPLIED>
<!ATTLIST net班 name CDATA #IMPLIED>
<!ATTLIST php班 name CDATA #IMPLIED>
<!ATTLIST ios班 name CDATA #IMPLIED>
<!ATTLIST teacher name CDATA #IMPLIED>
<!ATTLIST teacher sex CDATA #IMPLIED>
<!ATTLIST teacher age CDATA #IMPLIED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student id ID #IMPLIED>
DOM解析代码如下
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParserTest {
public static void main(String[] args) throws Exception {
//调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//调用工厂对象的newDocumentBuilder方法得到DOM解析器对象
DocumentBuilder builder = builderFactory.newDocumentBuilder();
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("class.xml");
Document document = builder.parse(inputStream);
Element root = document.getDocumentElement();
//遍历根节点下面的所有子节点
listNodes(root);
}
private static void listNodes(Node node) {
//节点是什么类型的节点
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element)node;
//判断此元素节点是否有属性
if(element.hasAttributes()) {
//获取属性节点的集合
NamedNodeMap map = element.getAttributes();
//遍历属性节点的集合
for(int k=0; k<map.getLength(); k++) {
//获取具体的某个属性节点
Attr attr = (Attr) map.item(k);
System.out.println("name:::" + attr.getNodeName() + " value::" + attr.getNodeValue() + " type::" + attr.getNodeType());
}
}
//获取元素节点的所有孩子节点
NodeList nodeList = element.getChildNodes();
//遍历
for(int j=0; j < nodeList.getLength(); j++) {
//得到某个具体的节点对象
Node nd = nodeList.item(j);
System.out.println("name::" + nd.getNodeName() + " value:::" + nd.getNodeValue() + " type:::" + nd.getNodeType());
//再次进入遍历节点的迭代
listNodes(nd);
}
}
}
}

浙公网安备 33010602011771号