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. 夜神模拟器与HBuilder连接/cmd运行提示符/执行夜神模拟器命令/执行HBuilder命令

    第一步:启动HBuilder和夜神模拟器 第二步:通过运行电脑命令CMD进入(电脑运行命令的快捷键是:windows键+R2.Ctrl键与Alt键之间的那个键就是windows键或者点击左下角开始图标 ...

  2. 模拟对象测试——EasyMock

    一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...

  3. Dalvik详解

    整理自百度百科 Dalvik Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一 ...

  4. canvas水波纹效果

    先看效果 演示效果 自然界中水波纹效果十分麻烦,我这里只是根据水波纹的几个特性,在理想环境下模拟水波纹的扩散效果. 这里应用到的属性有:扩散.波动.折射. 扩散:很好理解,水波纹会从触发原点开始向周围 ...

  5. php练习 租房子

    题目要求 1.封装类 <?php class DBDA { public $fuwuqi="localhost"; //服务器地址 public $yonghuming=&q ...

  6. python 标准库 -- glob

    glob glob.glob() import glob l = glob.glob("/root/*") # 返回列表 print l # 输出如下 ['/root/databa ...

  7. ionic结合HTML5实现打电话功能

    HTML5中这样子可以实现打电话的功能,但是在ionic实际项目中,并不是直接就可以这样子用,需要配置一下config.xml文件就可以在手机上调用到自己的联系人打电话页面了, 因为项目是引用的Cor ...

  8. qt中setStyleSheet导致的内存泄漏

    原始日期: 2017-01-05 19:31 现象:程序运行至某一个界面下,内存出现缓慢持续的占用内存增长   原因:经过排查,确定是在事件派发的槽函数中频繁重复调用setStyleSheet导致的 ...

  9. 详解 RAC 中各种IP和监听的意义

    一.SCAN 概念 SCAN(Single Client Access Name)是 Oracle从11g R2开始推出的,客户端可以通过 SCAN 特性负载均衡地连接到 RAC数据库 SCAN 最明 ...

  10. Flash TextField selectable bug block TextEvent.Link solution

    There is an old version Felx SDK bug(in my case it's Flex SDK v3.3.0.4852) that when TextField.selec ...