TestDom.java

package com.sxt.dom;

import java.io.File;
import java.io.IOException; 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;
import org.xml.sax.SAXException; /*
* DOM解析文档:DOM把XML文档映射成一个倒挂的树,每个节点都是一个对象
* DOM:document object model 文档对象模型
* 缺点:1.前三步不能省略
* 2.空白节点没有过滤
*/
public class TestDom {
public static void main(String[] args) throws Exception {
//创建解析工厂 DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//解析文档 获取文档内容
Document document = builder.parse(new File("product2.xml"));
//拿到dom树 属性 元素
NodeList nodeList = document.getElementsByTagName("product");
//拿到根节点
Node node = nodeList.item(0);//Node getNodeType为1
System.out.println(node.getNodeName());
//拿到所有子节点
NodeList childNodes = node.getChildNodes();
//System.out.println(childNodes.getLength());//5 包括空白 空白也是子节点
//遍历子节点 包括空格
for(int i=0; i<childNodes.getLength(); i++){
Node childNode = childNodes.item(i);
//System.out.println(childNode.getNodeType());//3表示空白
//如果节点不是空白 空白:TEXT_NODE
if(childNode.getNodeType() == Node.ELEMENT_NODE){
String nodeName = childNode.getNodeName();
System.out.println(nodeName);
//拿到属性的值
//Element是可以有属性和子节点的node。 getAttribute(String)
Element childElem = (Element)childNode;//易错!!w3c下的Element
String attribute = childElem.getAttribute("id");
System.out.println(attribute);
//以根节点为例 继续找儿子节点
NodeList nodeList2 = childElem.getChildNodes();
for(int j=0; j<nodeList2.getLength(); j++){
Node node2 = nodeList2.item(j);
if(node2.getNodeType() == Node.ELEMENT_NODE){
Element sonElem = (Element)node2;
String name = sonElem.getNodeName();
String value = sonElem.getTextContent();
System.out.println(name +"\t"+ value);
}
}
System.out.println();
}
}
}
}

product2.xml (工程文件上右键  新建  other  XML)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部DTD约束 -->
<!DOCTYPE product SYSTEM "product2.dtd">
<product>
<item id = "P001">
<name>蜘蛛王皮鞋</name>
<price>268</price>
<color>黑色</color>
<size>42</size>
<stock>500</stock>
</item>
<item id = "P002">
<name>好皮鞋</name>
<price>88</price>
<color>蓝色</color>
<size>42</size>
<stock>100</stock>
</item>
</product>

product2.dtd 新建  XML dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT product (item+)>
<!ELEMENT item (name,price,color,size,stock)>
<!ATTLIST item id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT color (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT stock (#PCDATA)>

最新文章

  1. (转)内置系统账户:Local system/Network service/Local Service 区别
  2. java的eclipse操作和常用类Object的使用
  3. Rebar:Erlang构建工具
  4. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
  5. 面向对象之abstract
  6. 【mysql的设计与优化专题(2)】数据中设计中的范式与反范式
  7. final, finally, finalize的区别
  8. Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈
  9. Solr Update备注
  10. VC6使用技巧
  11. 由浅入深学习.NET CLR 系列:目录
  12. Vue框架Element的事件传递broadcast和dispatch方法分析
  13. IDEA第一章----下载安装idea,设置背景字体编码,配置JDK/Maven
  14. Uncaught TypeError: Cannot read property ‘split’ of undefined
  15. ElasticSearch本人启动报错总结
  16. java 11 值得关注的新特性
  17. 【POJ2676】sudoku 搜索
  18. Java程序员如何选择未来的职业路线
  19. python利用socket写一个文件上传
  20. 02.设计模式_NullObject模式

热门文章

  1. Gradle:gradle下载插件
  2. UnhandledPromiseRejectionWarning: SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client
  3. JavaScript模板引擎实例应用(转)
  4. 玩转webpack之webpack的基本知识
  5. jnhs解决办法部署错误: 未能启动 Tomcat, 服务器端口 8084 已在使用中。
  6. 【洛谷P1207】双重回文数 【USACO1.2】
  7. 洛谷P1029 最大公约数和最小公倍数问题 [2017年6月计划 数论02]
  8. 数组的方法之(Array.prototype.filter() 方法)
  9. 灵动微本土MCU厂商具有吸引力的增长点
  10. 机器学习之决策树(ID3)算法与Python实现