DTD约束
Book.dtd:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,价格,介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)> 为书名设置属性 name(必须)
<!ATTLIST 书名 name CDATA #REQUIRED> Book.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架
SYSTEM "book.dtd">
<书架>
<书>
<书名 name="wy">计算机科学与技术</书名>
<价格>36.0</价格>
<介绍>这本书很好</介绍>
</书>
<书>
<书名 name="ztt">科学管理课</书名>
<价格>30.0</价格>
<介绍>这本书挺好</介绍>
</书>
<书>
<书名 name="wu">李清照集注</书名>
<价格>60.0</价格>
<介绍>这本书非常好</介绍>
</书>
</书架>
Jaxp对xml进行DOM解析---读取
(1)获取XML中的书名 public void read() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); NodeList list = document.getElementsByTagName("书名");
Node node = list.item(1);
String content = node.getTextContent();
System.out.println(content); } (2)获取所有的节点
public void read2() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); Node root = document.getElementsByTagName("书架").item(0);
list(root); } private void list(Node root) {
if(root instanceof Element)
System.out.println(root.getNodeName());
NodeList list=root.getChildNodes();
for(int i=0;i<list.getLength();i++)
{
Node child=list.item(i);
list(child);
} }
(3)获取文档中的属性
public void read3() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); Element bookname =(Element) document.getElementsByTagName("书名").item(0);
String value=bookname.getAttribute("name");
System.out.println(value);
}
XML解析---增加
(1)默认在末尾添加节点
@Test
public void add() throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml");
//创建节点
Element ele=document.createElement("价格");
ele.setTextContent("10元");
//创建节点挂在第一个节点上
Element book=(Element)document.getElementsByTagName("书").item(0);
book.appendChild(ele);
//把更新后内存写回到xml文档
TransformerFactory tffactory=TransformerFactory.newInstance();
Transformer tf=tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml"))); } (2) 在文档指定位置添加节点
@Test
public void add2() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml");
// 创建节点
Element ele = document.createElement("价格");
ele.setTextContent("10元"); // 得到参考节点
Element refNode = (Element) document.getElementsByTagName("价格").item(0); // 得到要挂的节点
Element book = (Element) document.getElementsByTagName("书").item(0); // 往book节点的指定位置插孩子节点
book.insertBefore(ele, refNode);
// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml"))); }
(3) 在文档中为标签添加属性
@Test
public void addAttr() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml");
Element bookname = (Element) document.getElementsByTagName("书名")
.item(0);
bookname.setAttribute("name", "wy");
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml"))); }
删除
1.删除1
@Test
public void delete1() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); // 得到要删除的节点
Element ele = (Element) document.getElementsByTagName("价格").item(0); // 得到要删除的节点的父节点
Element book = (Element) document.getElementsByTagName("书").item(0); // 父节点删除子节点
book.removeChild(ele); TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml")));
}
(2)删除2
@Test
public void delete2() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); // 得到要删除的节点
Element ele = (Element) document.getElementsByTagName("价格").item(0);
ele.getParentNode().getParentNode().removeChild(ele.getParentNode()); TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml")));
}
5更新
@Test
public void update() throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); Element ele=(Element)document.getElementsByTagName("价格").item(0);
ele.setTextContent("100元"); //把更新后的内存写到xml文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
}
SAX解析XML
1.步骤:
  //创建工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//得到解析器
SAXParser sp=factory.newSAXParser();
//得到读取器
XMLReader reader=sp.getXMLReader();
//设置内容处理器
reader.setContentHandler(new ListHandler());
//读取xml文档内容
reader.parse("src/book.xml");

XML学习经验实例总结2的更多相关文章

  1. delphi操作xml学习笔记 之一 入门必读

    Delphi 对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...

  2. 我个人的Java学习经验(一家之言)

    声明:本文只是我的个人经验之谈,或者连经验之谈都算不上,因为我觉得自己还是个新手,没有什么经验可谈,就算是我分享一下自己从开始学习Java到现在的一些心路历程吧,各位看官暂且看吧,欢迎交流.第一部分算 ...

  3. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  4. Robot framework--内置库xml学习(一)

    Using lxml By default this library uses Python's standard ElementTree module for parsing XML, but it ...

  5. 从技术小白到收获BAT研发offer,分享我的学习经验和感悟(赠送相关学习资料)

    去年秋季参加了校园招聘,有幸拿到了BAT.头条.网易.滴滴.亚马逊.华为等offer,经过研究生两年的学习积累,终于达成了自己的目标,期间也经历了很多,谨以此文,聊表感叹,也会分享很多我的Java学习 ...

  6. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  7. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  8. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  9. XML 学习介绍 收藏

    XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...

随机推荐

  1. Clojure学习02:语法

    相比我们传统的 c ,java ,python ,javascript等,Clojure的语法比较特别,初一看,还可能会有些不适应. 本文来介绍下Clojure的语法特点. 一.表达式 所有的Cloj ...

  2. YII 路由配置

    伪静态,通过设置server服务,做域名地址的转换工作. urlManager地址美化,通过程序的方式实现地址美化工作. 通过在主配置文件里配置组件来实现: 'components'=>arra ...

  3. stm32之CAN总线基础

    can总线协议概述: CAN是Controller Area Network的缩写,由德国博世公司开发:CAN通过ISO11891以及ISO11519进行了标准化:     CAN总线的特点: 1.多 ...

  4. POJ1700(过河问题)

    #include<iostream> #include<algorithm> using namespace std; ]; int main() { int t,i; cin ...

  5. java--创建多线程两种方法的比较

    [通过继承Thread] 一个Thread对象只能创建一个线程,即使它调用多次的.start()也会只运行一个的线程. [看下面的代码 & 输出结果] package Test; class ...

  6. Foundation补充

    1常用结构体: NSRange.NSPoint(CGPoint).NSSize(CGSize).NSRect(CGRect) 2 NSRange: 字符串中有一个方法rangeOfString:str ...

  7. JVM调优总结(十)-调优方法

    JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...

  8. C语言,题目:函数调用,内存,malloc找错

    malloc int* p = (int *) malloc (sizeof(int)*128); //分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存 ...

  9. hdu - 3572 - Task

    题意:有N个作业,M台机器,每个作业1天只能同1台机器运行,每台机器1天只能运行1个作业,第i个作业需要pi天完成,且只能从Si到Ei中选Pi天,问能否完成所有作业(T <= 20, N< ...

  10. Cppcheck 1.54 C/C++静态代码分析工具

    Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型.   官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GC ...