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. 转:javascript面向对象编程

    作者: 阮一峰 日期: 2010年5月17日 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学 ...

  2. Swift编程语言学习11—— 枚举全局变量、局部变量与类型属性

    全局变量和局部变量 计算属性和属性监视器所描写叙述的模式也能够用于全局变量和局部变量,全局变量是在函数.方法.闭包或不论什么类型之外定义的变量,局部变量是在函数.方法或闭包内部定义的变量. 前面章节提 ...

  3. 数据挖掘算法学习(三)NaiveBayes算法

    算法简单介绍 NBC是应用最广的分类算法之中的一个.朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率.同一时候,NBC模型所需预计的參数非常少,对缺失数据不太敏感,算法也比較简 ...

  4. scanf()常犯错误

    ------------------------------------------------------------------------ <> 本意:接收字符串. 写成代码:voi ...

  5. 【转】文件恢复神器extundelete

    参考博文: 1.Linux中VMware虚拟机增加磁盘空间的扩容操作 http://www.net130.com/CMS/Pub/special/special_virtual/special_vir ...

  6. Java基础08 继承

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...

  7. Linux系统中如何添加自己的库文件路径

    库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用 ...

  8. D16Pascal的编译器和IDE

    https://github.com/Memnarch/D16Pascal https://github.com/Memnarch/D16IDE https://github.com/Memnarch ...

  9. 关于new enhancement的一些知识

    关于new enhancement sap源程序里也给我们留了很多. 以下例句point .section.spot说明这些知识点. 1.不管是point还是section 都是基于spot的,spo ...

  10. 删除workspace下的vss的scc文件

    public class DeleteAA { public static void main(String[] args) { DeleteAA aa=new DeleteAA(); aa.dele ...