1  XML理论回顾

1.1 XML概述

1、XML是可扩展标记语言。是由W3C指定并维护的,目前最新的版本是1.0

2、XML作用:

2.1传输数据,它是一种通用的数据交换格式

2.2配置文件。

1.2 xml语法

1、XML的声明

1.1语法:<?xml version="1.0" encoding="UTF-8"?>

保存在磁盘上的文件编码要与声明的编码一致。

encoding属性的默认 编码是:UTF-8

1.2XML的声明必须出现在XML文档的第一行

2、XML的注释

2.1语法:<!--这是注释-->

2.2注释不能出现在声明之前

3、CDATA区

CDATA是Character Data的缩写

把标签当做普通文本内容;

示例:

<![CDATA[

<itcast>www.itcast.cn</itcast>

]]>

4、特殊字符

&    &amp;

<     &lt;(less than)

>     &gt;(great than)

"      &quot;

'       &&apos;

5、引入css样式的命令

<?xml-stylesheeet type="text/css" href="type.css" ?>

·对中文命名的标签不起作用。

1.3 DTD约束

1、常用约束:DTD(Document Type Definition)文档类型定义

Schema

2、格式良好的XML:遵循XML语法的文档

有效的XML:遵守约束的文档。

有效的XML文档一定是格式良好的,但格式良好的不一定是有效的

3、单独的DTD文档在保存时要以【UTF-8编码】进行保存

4、编写DTD

4.1在XML文档中直接编写:

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE 书架 [

<!ELEMENT 书架 (书+)>

<!ELEMENT 书 (书名,作者,售价)>

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

]>

<书架/>

4.2引入外部DTD

4.2.1:当引用的DTD文档在本地时,采用如下方式:

<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>

4.2.2:当引用的DTD文档在公共网络上时,采用如下方式:

<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>

5、定义元素:

语法:<!ELEMENT 元素名称 使用规则>

使用规则:

(#PCDATA):表示标签主体内容为普通字符串

EMPTY:表示标签没有主体内容

ANY:主体为任意内容

(子元素):标签中的子元素

用逗号分开:按顺序出现

用“|”:选择其中一个

出现次数:

如果元素后面没有+*?:表示必须且只能出现一次

+:表示至少出现一次,一次或多次

*:表示可有可无,零次、一次或多次

?:表示可以有也可以无,有的话只能有一次。零次或一次

6、定义元素的属性

语法:<!ATTLIST 元素名称

属性名称1 属性值类型 设置说明

属性名称2 属性值类型 设置说明

....

>

属性值类型:

CDATA:普通文本数据

A|B|C "A":表示枚举值,只能从A、B、C中取其中一个,A为默认值

ID:表示取值不能重复

设置说明:

#REQUIRED:表示该属性必须出现

#IMPLIED:表示该属性可有可无

#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"

直接值:表示属性的取值为该默认值

2 XML具体操作

Dom树图解:

操作代码如下:

Xml文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书 出版社="清华">
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>50.00元</售价>
</书>
<书>
<书名>JavaScript网</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>

XML的增删改查

public static void main(String[] args) throws Exception, SAXException, IOException {
//1、得到解析器的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//2、得到XML文档的document对象
Document doc = db.parse("src/book.xml");
// test01(doc);
// test02(doc);//Document是Node的子类
// test03(doc);
// test04(doc);
// test05(doc);
// test06(doc);
// test07(doc);
test08(doc);
}
// 1、查找某一个节点的内容:第2本书的售价
private static void test01(Document doc){
//NodeList是一个接口类,而不是普通的集合
NodeList nList = doc.getElementsByTagName_r("售价");
//Node亦是如此,是一个类
Node node = nList.item(1);
System.out.println(node.getTextContent());
} // 2、遍历所有元素节点 : 递归
private static void test02(Node node){
//1、判断是否是元素节点
if (node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(node.getNodeName());
}
//2、判断是否有孩子节点 ,循环遍历
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child =children.item(i);
test02(child);//递归遍历
}
}
// 3、修改某个元素节点的主体内容
// 修改第一本书的售价:39.00--->50.00
private static void test03(Document doc) throws Exception{
//1、获取到这个节点
NodeList nList = doc.getElementsByTagName_r("售价");
//2、修改内容:修改了内存中的数据
nList.item(0).setTextContent("50.00元");
//3.更新XML文档到硬盘上
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(doc), new StreamResult("src/book.xml"));
}
// 4.向指定元素节点中增加子元素节点
// 第二本书中,增加出版时间 <出版时间> 2013-1-1</出版时间>
private static void test04(Document doc) throws Exception{
//1、找到第二本书的元素节点
Node node = doc.getElementsByTagName_r("书").item(1);
//2、创建新节点
Element newElement = doc.createElement_x_x_x_x("出版时间");
newElement.setTextContent("2013-1-1");
//3、建立与元素节点的关系
node.a(newElement);
//4、更新 硬盘上的XML文档
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(doc), new StreamResult("src/book.xml"));
}
// 5.向指定元素节点上,增加同级元素节点
// 在第一本书的<售价>前面,增加一个新节点 <出版社>清华出版社</出版社>
private static void test05(Document doc) throws Exception{
//1.找到第一本书的售价
Node node = doc.getElementsByTagName_r("售价").item(0);
//2.创建一个新节点
Element newElement = doc.createElement_x_x_x_x("出版社");
newElement.setTextContent("清华出版社");
//3.由父节点执行插入操作
node.getParentNode().insertBefore(newElement, node);
//4.更新XML文档
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(doc), new StreamResult("src/book.xml"));
}
// 6.删除某个节点
// 删除第一本书的售价
private static void test06(Document doc) throws Exception{
//1.找到第一本书的售价
Node node = doc.getElementsByTagName_r("售价").item(0);
//2.由父节点执行删除操作
node.getParentNode().removeChild(node);
//4.更新XML文档
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(doc), new StreamResult("src/book.xml")); }
// 7.获取属性的值
// 获取第一本书的属性值:出版社
private static void test07(Document doc){
//1、找到这个元素节点
Node node = doc.getElementsByTagName_r("书").item(0);
//2、判断是否是元素节点
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) node;
String values = e.getAttribute("出版社");
System.out.println(values);
}
}
// 8、增加某个元素节点的属性
// 增加第二本书的属性:出版社:北大青鸟
private static void test08(Document doc) throws Exception{
//1、找到第二本书
Node node = doc.getElementsByTagName_r("书").item(1);
//2、新建一个属性
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element)node;
e.setAttribute("出版社", "北大青鸟");
}
//4.更新XML文档
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(doc), new StreamResult("src/book.xml"));
}

(转)xml的更多相关文章

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  2. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  3. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  4. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  5. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  6. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  10. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

随机推荐

  1. 仿flash轮播

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  2. c# networkcomms 3.0实现模拟登陆总结

    最近项目需要做一个客户查询状态系统,当前上位机缺少服务功能,于是找到了networkcomms 开源框架,作为项目使用. 最新版networkcomms 下载地址:https://github.com ...

  3. Bash扩展顺序

    当进行变量替换.命令替换.数学扩展以及路径扩展时,Bash Shell遵循如下顺序: 1.大括号扩展 $ls f{oo,aa,unble} 2.~扩展 ~cb, ~/doc/working 3.命令参 ...

  4. Bash shell执行命令的优先级

    1.别名2.关键字:if.function.while .until等3.函数4.内置命令5.可执行程序或脚本 别关函内可 =-=-=-=-=Powered by Blogilo

  5. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM  

  6. .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)

    我们知道Kafka支持Consumer Group的功能,但是最近在应用Consumer Group时发现了一个Topic 的Partition不能100%覆盖的问题. 程序部署后,发现Kafka在p ...

  7. win7休眠的开启与关闭方法

    从开始菜单中找到“附件→命令提示符”,右击选择“以管理员身份运行”,此时可能需要输入管理员密码或进行UAC确认,手工输入如下命令:powercfg -a,从这里可以清楚的看到,计算机是支持休眠的,只是 ...

  8. MyElipse配置

    DK1.6.0+Tomcat6.0+myEclipse的安装配置 C:\Users\Administrator\AppData\Local\Genuitec\Pulse Explorer JDK1.6 ...

  9. linux 小技巧(查找替换文件中的ascii编码字符)

    这里纪录一些linux下用到的小技巧,以免遗忘 在linux中经常碰见各种文件处理.最常用的就是替换文件中的某些字符.常见字符替换还是很容易完成.但是有些不可见字符以及ascii编码字符等等都无法直接 ...

  10. [编织消息框架][netty源码分析]11 UnpooledHeapByteBuf 与 ByteBufAllocator

    每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...