关于XML的知识点总结

首选是关于XML的定义:

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

下面是关于XML文件使用的一些总结:

xml的语法:
(1)xml的文档声明(***)
(2)定义元素
(3)定义属性
(4)注释
(1)xml代码区分大小写
(2)xml的标签不能以数字或者下划线开头
(3)xml的标签不能以xml,xML...开头
(4)xml的标签不能包含空格和冒号
<a b><b:c>:这些都是不正确的
****************************************************************************************
属性的定义:
(1)一个标签上可以有多个属性
(2)属性名称不能相同
(3)属性名称和属性值之间使用=,属性值使用引号抱起来(可单引也可双引)
(4)属性的规范和元素的名称规范相同
****************************************************************************************
7.注释
<!--xml的注释-->:注意的地方:注释不能嵌套
8.特殊字符
转义字符
<&lt;>&gt
****************************************************************************************
9.cadata区:
可以解决多个字符都需要转义的操作
把这些都放在cdata区里边,就不需要转义了
写法:
<![CDATA[...]]>
****************************************************************************************
10.PI指令(处理指令)
可以在xml中设置样式  <?xml-stylesheet type="text/css" href="css的路径"?>
****************************************************************************************
11.xml的约束:
dtd约束和schma约束
****************************************************************************************
12.dtd的快速入门
创建一个.dtd文件
步骤:1)看xml中有多少个元素
     2)判断元素是简单元素还是复杂元素
          <!ELEMENT 元素名称(子元素1,子元素2,....)>
        简单元素:没有子元素
  <!ELEMENT 元素名称(#PCDATA)>




(3)在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM"dtd文件的路径">
       如果想要校验xml的约束,使用
****************************************************************************************
dtd的三种引入方式:
引入外部的dtd文件
第一种: <!DOCTYPE 根元素名称 SYSTEM"dtd文件的路径">
第二种:使用内部的dtd文件
<!DOCTYPE person[
<!ELEMENT person(name,age)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
]
第三种方式:<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
****************************************************************************************
使用dtd定义元素
<!ELEMENT 元素名 约束>
简单元素:没有子元素的元素
<!ELEMENT name (#PCDATA)>
#PCDATA:约束是字符串类型
EMPTY:元素必须为空
ANY:任意元素
复杂元素:
<!ELEMENT person(name,age,sex)>
子元素只能出现一次
<!ELEMENT person(name+,age,sex)>
表示name字段可以出现多次
<!ELEMENT person(name?,age,sex)>
表示出现0次或则1次
<!ELEMENT person(name*,age,sex)>
表示任意次
<!ELEMENT person(name|age|sex)>
只能出现name,age,sex中的任意一个
****************************************************************************************
使用dtd定义属性
语法:
<!ATTLIST 元素名称
属性名称 属性类型 属性约束
>
属性类型:
CDATA:字符串
枚举:只能在一定范围内出现值,但是每次只能出现其中的一个(aa|bb|cc|)
ID:只能是字母或者下划线开头
#REQUIRED:属性必须存在
#IMPLIED:属性可有可无
#FIXED:表示一个固定值
直接值:
不写属性,使用直接值
写了属性,使用设置的那个值
<!-ATTLIST school
ID5 CDATA "www">
****************************************************************************************
实体的定义
语法:<!ENTITY 实体名称 "实体的值">
<!ENTITY TEST "wwwww">
<name ID3="A1">&TEST;</name>
定义的实体要定义在内部的dtd中
****************************************************************************************
xml解析简介(**)
DOM方式&SAX方式
****************************************************************************************
18.jaxp是javase的一部分
dom:
DOcumentBuilder:解析器类
-这个类是一个抽象类,不能new


此类的实例可以从DocumentBUilderFactory.newDocumentBuilder()方法获取.
DocumentBUilderFactory:解析器工厂,也是抽象类,不能new
newInstance()获取DocumentBUilderFactory的实例


sax:SAXPareer
    SAXparseerFactory
****************************************************************************************
19.使用jaxp(dom方式)解析XML文件
步骤:


//创建解析器工厂
DocumentBuilderFactory builderfactory= DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder=builderfactory.newDocumentBuilder();
//解析xml返回document
Document document=builder.parse("src/newFile.xml");
//得到name元素
NodeList list=document.getElementsByTagName("name");
//遍历集合
for(int i=0;i<list.getLength();i++){
Node name1=list.item(i);//得到每一个name元素
String s=name1.getTextContent();
System.out.println(s);
}
****************************************************************************************
XML的Schema约束:
dtd语法:<!ELEMENT 元素名称 约束>
Schema(可以有多个)符合XML的方法,多个schma使用名称空间来区分
Schema(.xsd)
(1)看xml文件中有多少个元素<element>
在schma文件里边
属性:xmlns="http://www.w3.org/2001/XMLSchema"表示当前文件是一个约束文件
targetNamespace="瞎写一个"
看xml文件中有几个元素
<sequence>表示元素出现的顺序
<all>表示元素只出现一次


<choice>:表示元素只能出现其中的一个
maxOccurs="unbounded":表示出现的次数没有限制
<any></any>:表示任意元素
可以约束属性
写在复杂元素的里面
****************************************************************************************
得到document


        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
document的父接口是Node
如果在document中找不到想要的方法就去node里边找
document中的方法:getRootElement():获取根节点返回的是根节点
使用dom4j查询XML的步骤:
创建解析器->得到Document->得到root节点->得到所有的p1标签(element(表示获取标签下第一个子标签),elements
(表示获取到标签下面一层所有这个名称的子标签)->得到name->得到name里边的值


****************************************************************************************
7.使用dom4j给XML文件添加一个元素
创建解析器->得到Document->得到root节点->获取第一个p1->在p1下面添加元素->再添加完成的元素下面添加文本
->回写XML(格式化使用OutputFormat,使用createPrrttyPrint方法,表示一个漂亮的各式使用XMLWriter
来第一个参数是XML文件的路径直接使用new FileOutPutStream("路径"),第二个参数是文件的类型




****************************************************************************************
8.在特定位置添加元素
eg:在第一个p1元素的age下面添加<School></School>标签
创建解析器->得到Document->得到root节点->获取第一个p1->获取p1下面所有的元素(element
方法,返回List集合,使用list里边的方法,在特定位置添加元素add(int index,E element)
)->回写XML


********************************************
9.利用dom4j实现节点的修改操作
1.得到document 2.得到根节点 3.得到第一个P1元素 4.得到p1下面的age 5.修改值 6.回写XML
********************************************
使用Dom4j实现删除节点的操作
删除第一个p1下面的<select></select>节点
****************************************************************************************
使用dom4j支持xpath的操作:
可以直接得到某个元素
第一种形式:
/AAA/BBB/DDD:表示一层一层的,AAA下面的BBB下面的DDD
第二种形式:
//BBB表示只要名称是BBB就可以全部得到,
第三种形式:
/*:表示所有的元素
/*/*/*/BBB表示3层下面的BBB都可以得到
第四种形式:
BBB[1]:表示第一个BBB元素
BBB[last()]:表示最后一个BBB元素
第五种形式:
//BBB[@id]:表示只要BBB上有id属性,都得到
第六种形式:
//BBB[@id='b1']:表示只要BBB上有id属性,并且id属性的值是b1,都得到
****************************************************************************************
dom4j默认不支持Xpath,需要导入jar包
在dom4j里边提供了两种方法,用来支持xpath
**selectNodes
**selectSingleNode("xpath表达式")
获取多个节点
**selectSingleNode("xpath表达式")
使用xpath实现:查询xml中所有的的name元素的值
所有的name元素的Xpath表示:name
使用selectNodes("//name");
使用xpath实现,获取第一个p1下面的name值
********************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值