<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部验证 -->
<!DOCTYPE Students SYSTEM "Students.dtd">
<!--内部验证
<!DOCTYPE Students[
<!ELEMENT Students (student+)>
<!ELEMENT student (name,age,sex)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
]>
-->
<Students>
<student id="20170625">
<name>张瑞</name>
<age>24</age>
<sex>男</sex>
</student>
<student id="20170626">
<name>胡黎明</name>
<age>24</age>
<sex>男</sex>
</student>
</Students>
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Students (student+)>
<!ELEMENT student (name,age,sex)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomTest {
public static void main(String[] args) throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("Students.xml");
NodeList nodeList = document.getElementsByTagName("Students");
Node node = nodeList.item(0);
NodeList childNodes = node.getChildNodes();
System.out.println(childNodes.getLength());
}
}
dom解析xml的步骤:
1.新建解析工厂
2.新建解析器
3.解析文件
4.形成dom树
5.获取根节点
6.拿到根节点的所有子节点
dom解析xml时会包括空格,所以上述的结果是5
xml:基于XML树结构 比较耗资源
适用于多次访问XML
for(int i=0;i<childNodes.getLength();i++){
Node node2 = childNodes.item(i);//获取到子节点
//3.代表了空白节点 1.代表实际节点
//System.out.println(node2.getNodeType());
if(node2.getNodeType()==1){
Element ele = (Element)node2;//拿到含有数据的节点(元素)
String attribute = ele.getAttribute("id");//拿到属性值
System.out.println("id----->"+attribute);
NodeList childNodes2 = node2.getChildNodes();//拿到所有的Student的子节点 age sex name
for(int j=0;j<childNodes2.getLength();j++){
Node node3 = childNodes2.item(j);//拿到Student的子节点age sex name
if(node3.getNodeType()==1){//去除空白节点
Element ele2 = (Element)node3;
String nodeName = ele2.getNodeName();
String textContent = ele2.getTextContent();
System.out.println(nodeName+"--->"+textContent);
}
}
}
System.out.println();
}