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. rabbitmq实现单发送单接收

    1.创建两个项目.都使其支持rabbitmq (1)在pom.xml文件中添加支持rabbitmq的jar包 <dependency> <groupId>org.springf ...

  2. Eclipse luna安装 Ivy

    在线安装地址:http://www.apache.org/dist/ant/ivyde/updatesite

  3. tomcat的访问日志

    https://blog.csdn.net/qq_30121245/article/details/52861935 配置位置在这里,每一个域名设置都可以单独设置 %a   这是记录访问者的IP,如果 ...

  4. 推荐大家自学的java学习网站,生动的讲解适合刚入门

    java学习网站(不仅仅是只学习java的知识):http://how2j.cn 首先大家来看看这个网站都有些啥 首页:图中的左侧目录大家看到了,从java基础到高级,从后台技术到前端页面,数据库,还 ...

  5. Docker Nginx部署

    1.下载nginx镜像 docker pull nginx 2.创建nginx配置文件 vim /etc/nginx/nginx.conf user nginx; worker_processes 1 ...

  6. 使用Workstation虚拟机部署Linux操作系统

    一.安装虚拟机: 1.安装VMware Workstation; 2.选择主页.点创建新的虚拟机: 3.选择“典型”然后点下一步: 4.选择稍后安装操作系统: 5.客户机从左系统选择“Linux”版本 ...

  7. mysql连接出现Unknown system variable 'tx_isolation'异常

    出现这个异常,是因为mysql-connector-java.jar的版本太低,数据库的版本太高,不匹配导致的. 因此将mysql-connector-java升级到最新版本就解决了问题. 最新的三个 ...

  8. 六.随机神经网络Boltzmann(玻尔兹曼机)

    Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...

  9. shared_from_this bad_weak_ptr的原因

    原因:创建类A的对象的时候没有用智能指针包裹,而是直接new的裸指针. enable_from_this 的使用与实现原理说明: shared_from_this()是enable_shared_fr ...

  10. Vue-- vue-preview(图片查看器)的使用步骤:

    vue-preview的使用步骤: )下载 )配置:找到配置文件加入: { test: /vue-preview.src.*?js$/, loader: 'babel-loader' }, 在处理ur ...