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的更多相关文章

  1. poi 读取使用 Strict Open XML 保存的 excel 文档

    poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...

  2. 文档ID:某某 模板文件不存在,无法解析文档!

    如果是生成栏目列表时出现这样的问题]:   1.可以修改include/arc.listview.class.php这个文件. 2.复制代码     echo "模板文件不存在,无法解析文档 ...

  3. DOM浏览器文档模型

    DOM浏览器文档模型 1.对XHM/XHTML 编写成DOM文档 可形成动态网页 2.'*'获取所有节点 GetElementsByTagName():获取所有的标签名的集合--需要在js中使用win ...

  4. xml和xsd架构文档相关知识

    1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...

  5. DedeCMS模板文件不存在,无法解析文档! 问题定位方法

    生成静态的时候,经常会遇到“模板文件不存在,无法解析文 档!”的问题.很多朋友试过论坛里很多方法,都是针对某些人可以解决,某些人的问题依旧,为什么呢?其实问题很可能确实是多种多样的,表现结果却是一样, ...

  6. dedecms 模板文件不存在,无法解析文档"的终极各种解决办法

    方法一:[此对应喜欢把模板文件使用".html"的格式,]  /include/arc.archives.class.php 556行    if (!preg_match(&qu ...

  7. Java XML DOM解析范例源码

    下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...

  8. dedecms 模板文件不存在 无法解析文档!问题定位方法!

    生成静态的时候,经常会遇到“模板文件不存在,无法解析文 档!”的问题.很多朋友试过论坛里很多方法,都是针对某些人可以解决,某些人的问题依旧,为什么呢?其实问题很可能确实是多种多样的,表现结果却是一样, ...

  9. dedecms 模板文件不存在,无法解析文档的终极各种解决办法

    dedecms 模板文件不存在,无法解析文档"的终极各种解决办法 方法一:[此对应喜欢把模板文件使用".html"的格式,] /include/arc.archives. ...

随机推荐

  1. Java数据结构和算法(七)--AVL树

    在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树 ...

  2. 转:Android检查设备是否联网

    public static boolean isConnect(Context context) { ConnectivityManager connectionManager = (Connecti ...

  3. spring cloud深入学习(六)-----熔断监控Hystrix Dashboard和Turbine

    Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...

  4. 群晖安装transmission

    首先 需要添加第三方的套件下载地址 http://packages.synocommunity.com/ 然后找到tr 根据需要设置文件夹路径 因为我需要跑rss,所以用到了flexget,先放这里 ...

  5. 提升mysql服务器性能(分库、分片与监控)

    原文:提升mysql服务器性能(分库.分片与监控) 版权声明:皆为本人原创,复制必究 https://blog.csdn.net/m493096871/article/details/90145515 ...

  6. 2019.9.28 csp-s模拟测试54 反思总结

    咕咕咕的冲动如此强烈x T1x: 看完题目想了想,感觉把gcd不为1的强行放在一组,看作一个连通块,最后考虑连通块之间的组合方式就可以了. 然后维护这个连通块可以写并查集可以连边跑dfs怎么着都行… ...

  7. python 模拟实验

  8. JavaScript Libraries In A TypeScript Application, Revisited

    If you haven’t already gotten involved with it, you’ll probably know that TypeScript is becoming inc ...

  9. Wndows下Apache+php+Mysql环境的搭建及其涉及的知识

    一.安装Apache 1. 在网上搜索以下3个文件,以及找一个地方新建一个文件夹 好吧,这里有下载链接:http://pan.baidu.com/s/1hr9IdSS 文件夹内有:apache,mys ...

  10. DIV元素垂直居中的分析与实现

    首先,对于需要垂直居中的元素常规居中处理 margin: 0 auto; 接下来要设置div的祖先元素的宽高为100%, 在默认的设置中他们都为0: html, body { width: %; he ...