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. ...
随机推荐
- rabbitmq实现单发送单接收
1.创建两个项目.都使其支持rabbitmq (1)在pom.xml文件中添加支持rabbitmq的jar包 <dependency> <groupId>org.springf ...
- Eclipse luna安装 Ivy
在线安装地址:http://www.apache.org/dist/ant/ivyde/updatesite
- tomcat的访问日志
https://blog.csdn.net/qq_30121245/article/details/52861935 配置位置在这里,每一个域名设置都可以单独设置 %a 这是记录访问者的IP,如果 ...
- 推荐大家自学的java学习网站,生动的讲解适合刚入门
java学习网站(不仅仅是只学习java的知识):http://how2j.cn 首先大家来看看这个网站都有些啥 首页:图中的左侧目录大家看到了,从java基础到高级,从后台技术到前端页面,数据库,还 ...
- Docker Nginx部署
1.下载nginx镜像 docker pull nginx 2.创建nginx配置文件 vim /etc/nginx/nginx.conf user nginx; worker_processes 1 ...
- 使用Workstation虚拟机部署Linux操作系统
一.安装虚拟机: 1.安装VMware Workstation; 2.选择主页.点创建新的虚拟机: 3.选择“典型”然后点下一步: 4.选择稍后安装操作系统: 5.客户机从左系统选择“Linux”版本 ...
- mysql连接出现Unknown system variable 'tx_isolation'异常
出现这个异常,是因为mysql-connector-java.jar的版本太低,数据库的版本太高,不匹配导致的. 因此将mysql-connector-java升级到最新版本就解决了问题. 最新的三个 ...
- 六.随机神经网络Boltzmann(玻尔兹曼机)
Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...
- shared_from_this bad_weak_ptr的原因
原因:创建类A的对象的时候没有用智能指针包裹,而是直接new的裸指针. enable_from_this 的使用与实现原理说明: shared_from_this()是enable_shared_fr ...
- Vue-- vue-preview(图片查看器)的使用步骤:
vue-preview的使用步骤: )下载 )配置:找到配置文件加入: { test: /vue-preview.src.*?js$/, loader: 'babel-loader' }, 在处理ur ...