xml笔记

导图在这里插入图片描述

XML文档

文档结构

声明

<?xml version=1.0 encoding="UTF-8"?>

标签

在这里插入图片描述

Demo

https://www.w3school.com.cn/example/xmle/simple.xml

命名空间

XML解析器在解析XML文档时,对于重名的元素可能出现解析冲突。命名空间有助于标准化元素和属性,并为他们加上唯一的标识。语法如下:

xmlns:[prefix]="[命名空间的URI]"

prefix:前缀名称,用作命名空间的别名

xmlns:保留属性

Demo

https://www.w3school.com.cn/xml/xml_namespaces.asp

XML验证

用来确保xml文档的格式是良好的。

DTD

DTD(Document Type Definition)。

声明DTD

<!DOCTYPE 根元素 [定义内容]>

DTD元素

语法:

  • 限定元素
<!ELEMENT NAME CONTENT>

ELEMENT:关键字

NAME:元素名

CONTENT:元素类型(常用的元素类型如下)

1 #PCDATA :可以包含任何字符数据,但不可以包含任何子元素

<!ELEMENT title(#PCDATA)>

2 纯元素类型:只包含子元素,并且除这些子元素外没有任何文本内容

<!ELEMENT poems(poem*)>
  • 属性列表:<!ATTLIST 元素名 属性名 属性取值 限制条件>
<!ATTLIST student sex (male|female) #REQUIRED>
<!ATTLIST student age (0|2|3|9) #IMPLIED>

Demo

https://www.runoob.com/dtd/dtd-examples.html

Schema

Schema自身也是一种xml文档。

文档结构

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" //声明命名空间
targetNamespace="http://mynamespace/myschema" //本schema自定义的属性和数据类型来自此命名空间
elementFormDefault="unqualified" //命名空间不一定遵循schema(若是qualified则必须遵循)> 

Schema常用元素

在这里插入图片描述
还有simpleType及其子元素restrictionlist
complexType及其子元素sequencechoice

包含子元素的,就需要用到复杂类型。

如果元素的Type虽然是基本类型,但需要加入某些限制(比如:性别是字符串,但只能是男女,年龄应该在某一个整数范围),就可以使用自定义的简单类型。

Demo

https://www.runoob.com/schema/schema-example.html

XML解析

DOM解析

主要对象:

Document对象

(1) getElementsByTagName(String name):返回一个NodeList对象 ,包含所有指定标签名称的标签(仅有返传入的name的标签,不包括其子标签)。

(2) getDocumentElement():返回根对象(一个Element对象 )。

NodeList对象

(1) getLength():返回列表的长度。

(2) item(int index):返回根对象(一个Element对象 )。

Node对象

是一个抽象类。主要子类有Element,Text等。

(1) getChildNodes():返回NodeList,包含此节点所有子节点。

(2) getFirstChild()

(3) getLastChild()

(4) getNodeName()

(5) getNodeValue()

(6) getNodeType()

(7) getNextSibling():返回DOM树种此节点的下一个兄弟节点。

(8) getPreviousSibling():返回DOM树种此节点的上一个兄弟节点。

Element对象

(1) getAttritube(String attritube)

(1) getElementsByTagName(String name):返回name标签的所有后代Elements的NodeList。

DOM4J解析

获取Document对象相关代码:

SAXReader reader = new SAXReader();
Document document = reader.read(new File("demo.xml"));
节点相关操作

(1) 获取文档的根元素

Element root = document.gerRootElement();

(2) 获取某节点的单个子节点 (默认第一个)

Element childNode = node.element("子节点的name");

(3) 获取某节点的文档内容/设置某节点文本内容

String text = node.getText();
node.setText("值");

(4) 获取某节点的所有子节点

Element childNodes = node.elements("子节点的name");

(5) 遍历节点集合(先获得某节点的子节点集合)

for(Iterator it = nodes.iterator(); it.hasnext(); ) {
  Element elem = (Element)it.next();
  //...
}

(6) 在某节点下增加子节点

Element elem = superNode.addElement("子节点名字");

(7) 删除某节点(通过其父节点删除)

superNode.remove(childNode)
属性相关操作

(1) 获取某节点下的某属性

Attribute attribute = node.attribute("属性名");

(2) 获取属性的文本值

String text = attribute.getText();
//或者
String text = node.arrtibuteValue("属性名");

(3) 遍历某节点所有属性

for(Iterator it = node.attributeIterator(); it.hasnext(); ) {
  Attribute attribute = (Attribute)it.next();
  //...
}

(4) 设置某节点属性和属性值

node.addAttribute("name","Tom");

(5) 设置某属性的属性值

attribute.addAttribute("属性值");

(6) 删除某节点的某属性

node.remove();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值