<?xml version="1.0"?> <PEOPLE> <PERSON PERSONID="E01"> <NAME>Tony Blair</NAME> <ADDRESS>10 Downing Street, London, UK</ADDRESS> <TEL>(061) 98765</TEL> <FAX>(061) 98765</FAX> <EMAIL>[email protected]</EMAIL> </PERSON> <PERSON PERSONID="E02"> <NAME>Bill Clinton</NAME> <ADDRESS>White House, USA</ADDRESS> <TEL>(001) 6400 98765</TEL> <FAX>(001) 6400 98765</FAX> <EMAIL>[email protected]</EMAIL> </PERSON> <PERSON PERSONID="E03"> <NAME>Tom Cruise</NAME> <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS> <TEL>(001) 4500 67859</TEL> <FAX>(001) 4500 67859</FAX> <EMAIL>[email protected]</EMAIL> </PERSON> <PERSON PERSONID="E04"> <NAME>Linda Goodman</NAME> <ADDRESS>78 Crax Lane, London, UK</ADDRESS> <TEL>(061) 54 56789</TEL> <FAX>(061) 54 56789</FAX> <EMAIL>lind[email protected]</EMAIL> </PERSON> </PEOPLE>
package cn.sisy.xml;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomTest01 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("candidate.xml");
//知道文档大概结构:PERSON
NodeList list = document.getElementsByTagName("PERSON");
for(int i = 0 ; i<list.getLength() ; i++){
Element element = (Element) list.item(i);
//获取元素的属性值,适用于知道属性名称的时候
String content = element.getAttribute("PERSONID");
System.out.print("属性值:"+content+"---");
//节点类型
short tag = element.getElementsByTagName("NAME").item(0)
.getChildNodes().item(0).getNodeType();
System.out.print("节点类型:"+tag+"---");
//节点的名称,取决于其类型
String name = element.getElementsByTagName("NAME").item(0)
.getChildNodes().item(0).getNodeName();
System.out.print("节点名称:"+name+"---");
//节点的值
String value = element.getElementsByTagName("NAME").item(0)
.getChildNodes().item(0).getNodeValue();
System.out.println("节点值:"+value);
}
}
}
属性值:E01---节点类型:3---节点名称:#text---节点值:Tony Blair
属性值:E02---节点类型:3---节点名称:#text---节点值:Bill Clinton
属性值:E03---节点类型:3---节点名称:#text---节点值:Tom Cruise
属性值:E04---节点类型:3---节点名称:#text---节点值:Linda Goodman
package cn.sisy.xml;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 DomTest02 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("student.xml");
//getDocumentElement()访问文档的或文档元素的子结点
//文档的子结点就是文档的根元素结点,适用于不知道文档结构
Element root = document.getDocumentElement();
System.out.println("根元素:"+root.getTagName());
//获取根元素结点的所有子结点
NodeList list = root.getChildNodes();
for(int i = 0; i < list.getLength(); i++){
//元素与子元素,元素与元素之间的空白也被当做了一个结点
System.out.print(list.item(i).getNodeName());
}
//getTextContent():返回此节点及其后代的文本内容。
// for(int i = 0; i < list.getLength(); i++){
// Node n = list.item(i);
// System.out.print(n.getTextContent()+"--");
// }
System.out.println();
NodeList nodeList = document.getElementsByTagName("学生");
for(int i = 0; i < nodeList.getLength(); i++){
//用于获取元素的属性值:适用于不知道属性名称的情况下
NamedNodeMap nnm = nodeList.item(i).getAttributes();
for(int j = 0; j<nnm.getLength();j++){
String attrName = nnm.item(j).getNodeName();
System.out.print(attrName);
System.out.print("=");
String attrValue = nnm.item(j).getNodeValue();
System.out.print(attrValue+" ");
}
System.out.println();
}
}
}
根元素:学生名册
#text学生#text学生#text学生#text
准考证号=001 学号=1 教室号=001
准考证号=002 学号=2 教室号=002
准考证号=003 学号=3 教室号=003
<?xml version="1.0" encoding="UTF-8"?> <学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Course30\student.xsd"> <学生 学号="1" 准考证号="001" 教室号="001"> <姓名>张三</姓名> <性别>男</性别> <年龄>20</年龄> </学生> <学生 学号="2" 准考证号="002" 教室号="002"> <姓名>李四</姓名> <性别>女</性别> <年龄>19</年龄> </学生> <学生 学号="3" 准考证号="003" 教室号="003"> <姓名>王五</姓名> <性别>男</性别> <年龄>21</年龄> </学生> </学生名册>
package cn.sisy.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
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;
/**
* 使用递归解析给定的任意一个xml文档并且将其内容输出到命令行上
*/
public class DomTest03 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("student.xml"));
//获得根元素结点
Element root = doc.getDocumentElement();
parseElement(root);
}
private static void parseElement(Element element) {
String tagName = element.getNodeName();
NodeList children = element.getChildNodes();
System.out.print("<" + tagName);
//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断
NamedNodeMap map = element.getAttributes();
//如果该元素存在属性
if (null != map) {
//map.getLength()此映射中的节点数
for (int i = 0; i < map.getLength(); i++) {
//获得该元素的每一个属性
Attr attr = (Attr) map.item(i);
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
// System.out.println(map.getLength());
}
System.out.print(">");
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
//获得结点的类型
short nodeType = node.getNodeType();
if (nodeType == Node.ELEMENT_NODE) {
//是元素,继续递归
parseElement((Element) node);
} else if (nodeType == Node.TEXT_NODE) {
//递归出口
System.out.print(node.getNodeValue());
} else if (nodeType == Node.COMMENT_NODE) {
System.out.print("<!--");
Comment comment = (Comment) node;
//注释内容
String data = comment.getData();
System.out.print(data);
System.out.print("-->");
}
}
System.out.print("</" + tagName + ">");
}
}