(转)xml
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、特殊字符
& &
< <(less than)
> >(great than)
" "
' &'
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的更多相关文章
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- WebApi接口 - 响应输出xml和json
格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
- PHP中遍历XML之SimpleXML
简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...
随机推荐
- .NET中使用Redis总结
注:关于如何在windows,linux下配置redis,详见这篇文章:) 启动遇到问题 使用命令[redis-server.exe redis.windows.conf],启动redis 服务[如果 ...
- scala环境配置+hello world!
下载地址: http://www.scala-lang.org/download/ 我下载的是zip 配置环境变量 需要jdk支持,jdk的安装配置此处略过 控制台命令 scala -version ...
- CSS设置一行文字,超出部分自动隐藏
.textone { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; line-height: 25px; max-h ...
- css透明度的设置
Css代码 .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: ...
- 利用python将mysql中的数据导入excel
Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyxl将mysql数据库中查询的数据保存到exce ...
- Example007关闭窗口时关闭父窗口
<!--实例007关闭窗口时刷新父窗口--> <!DOCTYPE html> <html lang="en"> <head> < ...
- 分享几个 git 的使用场景
你真的会使用 git 吗?你能回答下面几个问题吗? 有三个commit(顺序:CommitA.CommitB.CommitC),它们相互独立,没有依赖. 在不修改B.C的前提下,修改A,怎么操作? 合 ...
- 【css技能提升】css高级技巧
本文是一个帮你提升 CSS 技巧的收藏集. 使用CSS复位 CSS复位可以在不同的浏览器上保持一致的样式风格.您可以使用CSS reset 库Normalize等,也可以使用一个更简化的复位方法: * ...
- nth-child 和nth-type的区别
一.深呼吸,直接内容:nth-child和:nth-of-type都是CSS3中的伪类选择器,其作用近似却又不完全一样,对于不熟悉的人对其可能不是很区分,本文就将介绍两者的不同,以便于大家正确灵活使用 ...
- [javascript 实践篇]——那些你不知道的“奇淫巧技”
1. 空(null, undefined)验证 刚开始,我是比较蠢的验证(我还真是这样子验证的) if (variable1 !== null || variable1 !== undefined | ...