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. jdbc的配置及jdbc连接常用数据库(mysql、sqlserver、Oracle)

    1.连接SQL Server数据库 import java.sql.*; publicclassMain{publicstaticvoid main(String[] args){String dri ...

  2. FastReport.NET 中使用二维码

    FastReport.net 是一个比较好用的报表控件,在编辑器中编辑以后 可以直接在vs 中引用. 最近在研究fastreport 现在讲解一下 如何使用它的二维码. fastreport 没有单独 ...

  3. 微信授权登录(PHP)

    微信授权登录(PHP) 微信授权 OAuth2.0授权 微信网页授权 主要是在项目中遇到网页授权登录这个需求,就对此做些总结记录. OAuth2.0授权 OAuth是一个开放协议,允许用户让第三方应用 ...

  4. php调用java

    PHP调用JAVA方式 1.     背景 在开发招商银行信用卡分期付款功能过程中,在支付成功之后需要对银行的返回数据进行签名验证,因签名加密方式招商银行是不提供的,只提供了相应的JAVA验证类测试例 ...

  5. 关闭数据库下的所有连接操作 sql存储过程

    use master go )) as begin ),) declare @spid int set @sql='declare getspid cursor for select spid fro ...

  6. java中String与StringBuffer拼接的区别

    学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...

  7. NoSQL数据库:Redis适用场景及产品定位

    传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量 ...

  8. 【Android Developers Training】 27. 序言:和其它应用交互

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. Canvas画布实现自定义时钟效果

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

  10. CSS雪碧图自动生成软件

    下载地址 http://www.99css.com/1524/ 包含详细的下载地址.下载步骤以及使用教程 亮点:自动合成雪碧图+自动生成雪碧图background-position代码 简单过程 下载 ...