XML之DOM解析文档 Day24
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)>
XML之DOM解析文档 Day24的更多相关文章
- poi 读取使用 Strict Open XML 保存的 excel 文档
poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...
- 文档ID:某某 模板文件不存在,无法解析文档!
如果是生成栏目列表时出现这样的问题]: 1.可以修改include/arc.listview.class.php这个文件. 2.复制代码 echo "模板文件不存在,无法解析文档 ...
- DOM浏览器文档模型
DOM浏览器文档模型 1.对XHM/XHTML 编写成DOM文档 可形成动态网页 2.'*'获取所有节点 GetElementsByTagName():获取所有的标签名的集合--需要在js中使用win ...
- xml和xsd架构文档相关知识
1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...
- DedeCMS模板文件不存在,无法解析文档! 问题定位方法
生成静态的时候,经常会遇到“模板文件不存在,无法解析文 档!”的问题.很多朋友试过论坛里很多方法,都是针对某些人可以解决,某些人的问题依旧,为什么呢?其实问题很可能确实是多种多样的,表现结果却是一样, ...
- dedecms 模板文件不存在,无法解析文档"的终极各种解决办法
方法一:[此对应喜欢把模板文件使用".html"的格式,] /include/arc.archives.class.php 556行 if (!preg_match(&qu ...
- Java XML DOM解析范例源码
下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...
- dedecms 模板文件不存在 无法解析文档!问题定位方法!
生成静态的时候,经常会遇到“模板文件不存在,无法解析文 档!”的问题.很多朋友试过论坛里很多方法,都是针对某些人可以解决,某些人的问题依旧,为什么呢?其实问题很可能确实是多种多样的,表现结果却是一样, ...
- dedecms 模板文件不存在,无法解析文档的终极各种解决办法
dedecms 模板文件不存在,无法解析文档"的终极各种解决办法 方法一:[此对应喜欢把模板文件使用".html"的格式,] /include/arc.archives. ...
随机推荐
- 使用nodejs安装http-server
一.下载nodejs(https://nodejs.org/) 二.在环境变量中配置nodejs路径: path: D:\Program\nodejs\ 三.打开终端: 使用node -v测试node ...
- sublime中用less实现css预编译
实现css预编译的方式有很多,听说glup很流行而且功能也很强大,但是就目前的工作而言,仅要css预编译和YUIcompress就够了,接下来切入正题 Less 是一门 CSS 预处理语言,它扩展了 ...
- hdu 2586 (lca-RMQ)
#include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...
- toString方法和valueof()方法的区别
JavaScript引用类型之Array数组的toString()和valueof()方法的区别 一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().to ...
- js的各种获取大小
相信大家也经常会被js的获取大小搞得头昏脑胀,到底应该用哪种方式获取才是我要的那种大小呢 好啦,在此我帮大家整理好我知道的那些. window.screen.availHeight 获取的是当前电脑 ...
- hdfs 的存储空间扩展
问题:之前集群上每个节点的的大小为50G, 但是硬盘容量是160G的, 不明白为什么才50个G: 后来发现是因为dfs.data.dir设置的问题,该目录下挂载的磁盘空间的大小就会作为该节点的容量.. ...
- 性能监控工具Munin
实际场景 公司产品需要观察Ubuntu主机性能,以衡量客户现场的产品是否能满足高频使用需求 选型 在比较了诸多工具之后,考虑时间成本因素,用了比较简单的Munin 安装步骤 1. apt-get in ...
- 【JZOJ3299】【SDOI2013】保护出题人 三分+凸壳
题面 出题人铭铭认为给SDOI2012 出题太可怕了,因为总要被骂,于是他又给SDOI2013 出题了. 参加SDOI2012 的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013 ...
- 2018-5-22-SublimeText-粘贴图片保存到本地
title author date CreateTime categories SublimeText 粘贴图片保存到本地 lindexi 2018-05-22 15:15:26 +0800 2018 ...
- ie8 下margin-top失效的小案例
一个小案例,是关于IE8下的margin-top的失效问题,巨日代码如下: 正常的chrome浏览器下的显示如下: margin-top=10px,正常显示 但是在ie8下,最终样式如下: margi ...