Java XML

可扩展:完全自定义,按照自己的规则来定义

标记:能让计算机认识的信息符号

  书本教材的编号======>证明书是你的

  身份证号码唯一的======>证明自己的身份

XML:

1.可扩展标记语言

2.符号w3c标准

3.着重数据的保存,不着重数据的显示

4.无需预编译功能

W3C:国际组织,万维网联盟组织,规定了xml,html,css,js,数据库...一系列的规范

以xml文件作为后缀名的文件,我们称之为xml文件

注意点:

1.根节点:在当前文件中只能有一个

2.所有的节点都是成对出现的

<学校>开放标签

</学校>闭合标签

3.所有的节点必须是正确的嵌套

4.xml文件中,严格区分大小写

xml的节点结构,我们称之为DOM树===>整个xml节点结构像一个倒挂的树

DOM:(Document Object Model)==>文档对象模型

特殊字符的转换

>   &gt;

<         &lt;

''        &apos;

"         &quot;

&         &amp

(空格)   &nbsp;

DTD文件(Document Type ):针对于xml文件的约束文件

<!ELEMENT package (result-types?, interceptors+, default-interceptor-ref*)>

ELEMENT:元素package

()里面的内容,称之为子元素

,:括号里元素的前后位置

?:子元素最多出现一次

+:子元素至少出现一次

*:子元素至少出现0次,最多出现N次

<!ATTLIST package
name CDATA #REQUIRED
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
strict-method-invocation CDATA #IMPLIED
externalReferenceResolver NMTOKEN #IMPLIED
>

ATTLIST:package元素中可以包含的属性

name,extends属性名

CDATA:Character  Data字符数据==>解析器不会解析的文本

PCDATA:Parsed  Character  Data被解析的字符数据====>解析器会解析的文本

#REQUIRED:属性是必须

#IMPLIED:属性不是必须

Schema  可以替换DTD,文件的扩展名是xsd(xml Schema Definition)

解析xml文件

1.DOM:基于xml文档树的解析,把文件中的内容全部读到内存中,占内存,消耗资源多

2.SAX:基于事件的解析,不会把文件中的全部内容读到内存中,占用资源少

3.JDOM:针对于java的特定模型!满足2 8原则!自身没有解析器,依赖于SAX2的解析器

4.DOM4j:是JDOM的一个分支,开放源码.性能优异,功能强大,依赖于SAX解析器

解析xml文件的思路:

1.把xml文件理解成一个DOM树

2.找到DOM树的根节点

3.然后根据需求去遍历

4.找到自己想要的节点

任务:

实现对xml文件中节点(元素)的增删查改

获取dom树:

SAXReader reader=new SAXReader();//创建解析器对象

Document document = reader.read(file);//获取dom树

Element root= document.getRootElement();//获取根节点

把内存中的数据保存在xml文件中,持久化数据:

//创建输出流格式化对象

OutputFormat format=OutputFormat.createPrettyPrint();

format.setEncoding("设置编码格式");

XMLWriter writer=new XMLWriter(new FileWriter(file), format);

新增节点:

Element classElement = root.addElement("class");//在根节点下创建一个新的节点class

classElement.addAttribute("name", "四班");//给class节点新增属性,

                                                       name:属性名,四班:属性值

Element studentElement = classElement.addElement("student");//再次增加子节点                                                                                      student

studentElement.addAttribute("name", "啦啦4");// 给student节点新增属性

studentElement.addText("有点浪");//新增文本节点

删除节点:

Iterator<Element> classes = root.elementIterator();//从根节点中获取所有的子节点

while(classes.hasNext()){

Element clazz = classes.next();//获取具体的一个子元素

if(clazz.attributeValue("name").equals(className)){

//删除节点,不允许自杀,必须通过父节点删除
classes.remove();

}

}

修改节点:

clazz.setAttributeValue("location", newClassName);//属性为location的值修改为新的                                                                   值

查询节点:

System.out.println("班级名称:"+clazz.attributeValue("name"));

//如果结点中有文本节点

if(!student.getTextTrim().equals("")){

System.out.println("这个学生的描述信息是:"+student.getTextTrim());

}

原文地址:https://www.cnblogs.com/s10-/p/8242853.html