1.XML报文

您所在的位置:网站首页 请求报文什么意思 1.XML报文

1.XML报文

2024-06-16 04:47| 来源: 网络整理| 查看: 265

目录

XML

XML语法:

XML解析(java):

DOM解析原理:

SAX解析原理:

XML约束

DTD约束

Schema约束

XML

Extend Markup Languge(可扩展标签语言)

标签由开发者按照一定的语法自己制定的

作用:

描述带关系的数据(软件的配置文件): 包含与被包含的关系。用于tomcat,struts、Hibernate、spring (三大框架)等作为数据的载体(存储数据,小型的“数据库”)

 

XML语法:

xml文件以xml后缀名结尾。 xml文件需要使用xml解析器去解析。浏览器内置了xml解析器

1400 0001 aaa111

注释: -- xml注释 --> 文档声明:

version: xml的版本号

encoding: 解析xml文件时查询的码表(解码过程时查询的码表)

   注意:

如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文件。如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的码表来保存。

处理指令 作用: 告诉xml解析如何解析xml文档

   href:告诉xml解析该xml文档引用了哪个css文件

   xml-stylesheet:只提取xml内容,不提取标签

标签/元素:开始标签 标签体内容 结束标签: ,元素可包含 属性、其他元素、文本。

或 空标签。没有标签体内容xml标签名称区分大小写。xml标签一定要正确配对。xml标签名中间不能使用空格。xml标签名不能以数字开头。

   注意: 在一个xml文档中,有且仅有一个根标签。在XML中空格和换行都作为原始内容被处理,所以数据内容一般不要有空格换行

属性: student 注意:

属性值必须以引号包含,不能省略,也不能单双引号混用一个标签内可以有多个属性,但不能出现重复的属性名

5个转义字符

<       ;

>       ;

"       ;

&       ;

空格       &nsbp;

CDATA块

作用:不想让解析引擎解析执行,可以让一些需要进行包含特殊字符的内容统一进行原样输出

headbody

]]>

 

XML解析(java):

xml文件除了给开发者看,更多的情况需要使用程序读取xml文件的内容。这叫做xml解析

解析方式(原理不同):DOM解析、SAX解析解析工具:

DOM解析工具:

JAXP (oracle-Sun公司官方)JDOM工具(非官方)Dom4J工具(非官方) 三大框架(默认读取xml的工具就是Dom4j)

SAX解析工具:

Sax解析工具(oracle-sun公司官方)

--------------------------------------------DOM-------------------------------------------------------------------------------

DOM解析原理:

xml解析器一次性把整个xml文档加载进内存(读取大文件会造成内存溢出),然后在内存中构建一颗Document对象树,树上的分支叫节点,通过节点对象可以访问、设置xml文档的内容。

节点Node分为:标签节点Element(标签名称),属性节点Attribute(属性名称、属性值),文本节点Text(文本内容),注释节点

-----------------------------------Dom4j工具-----------------------------------------------------

Dom4j工具使用步骤:

导入dom4j的核心包:dom4j-1.6.1.jar(非官方,不在jdk中)编写Dom4j读取xml文件代码

读取xml文档方法:

首先获取一个xmk文件的Document对象 //1.创建一个xml解析器对象 SAXReader reader = new SAXReader(); //2.读取xml文档,返回Document对象 Document doc = reader.read(new File("路径.xml"));

节点:

Iterator   Element.nodeIterator();          获取当前标签节点下的所有子节点(不包括孙以下节点,返回Iterator)

   标签:(只有标签节点才有子节点)

Element    Document.getRootElement();         获取xml文档的根标签

Element   ELement.element("标签名");          获取指定名称的第一个子标签

Iterator   Element.elementIterator("标签名");          获取指定名称的所有子标签

List    Element.elements();          获取所有子标签

   属性:

String     Element.attributeValue("属性名")         获取指定名称的属性值

Attribute   Element.attribute("属性名")         获取指定名称的属性对象

Attribute.getName()          获取属性名称

Attibute.getValue()          获取属性值

List   Element.attributes();         获取所有属性对象

Iterator   Element.attibuteIterator();          获取所有属性对象

   文本:

Element.getText();         获取当前标签的文本

Element.elementText("标签名")          获取当前标签的指定名称的子标签的文本内容

修改xml文档步骤:一、读取或创建一个Document对象

二、修改Document对象内容

   增加: 

Document doc =DocumentHelper.createDocument()          创建文档

addElement("名称")           增加标签。   //Element rootElem=doc.addElement("根标签")、rootElem.addElement("子标签")···一层层增加

addAttribute("名称",“值”)          增加属性

   修改:

Attribute.setValue("值")           修改属性值。   //先得到属性对象,然后修改属性值

Element.addAtribute("同名的属性名","值")          通过增加同名属性的方法,修改属性值

Element.setText("内容")          修改文本内容

   删除

Element.detach();          删除标签

Attribute.detach();          删除属性

三、把修改后的Document对象写出到xml文档中

//OutputFormat :指定写出的格式,指定生成与解析xml文档的编码 OutputFormat format = OutputFormat.createCompactFormat(); //紧凑格式.去除空格换行.项目上线的时候用 OutputFormat format = OutputFormat.createPrettyPrint(); //漂亮格式.有空格和换行.开发调试的时候用 format.setEncoding("utf-8"); //1.创建写出对象 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt); //2.写出对象 wirter.write(Document); //3.关闭流 writer.close();

-----------------------------xPath------------------------------------------------ 使用dom4j查询比较深的层次结构的节点(标签,属性,文本)比较麻烦,所以引入xPath技术

xPath技术

一门独立的语言,主要是用于快速获取所需的节点对象。

使用步骤:

导入xPath支持jar包 : jaxen-1.1-beta-6.jar使用xpath方法

List   selectNodes("xpath表达式"+变量+"xpath表达式");       查询多个节点对象(可传入变量)

Node   selectSingleNode("xpath表达式");       查询一个节点对象

xPath语法:类似在一个文件系统中定位文件

/       绝对路径    表示从xml的根位置开始或子元素(一个层次结构)

//       相对路径    表示不分任何层次结构的选择所有符合规则的元素

*       通配符    表示匹配所有元素

[]       中间写条件    选择符合条件的元素。写数字表示位置、last()表示最后一个元素

@      后跟属性    表示选择哪种属性的属性节点

and      与关系    表示条件的与关系(等价于&&)

not()

text()       文本    表示选择文本内容

--------------------------------------------------------SAX-------------------------------------------------------------------

SAX解析原理:

从上往下,加载一点,读取一点,处理一点。对内存要求比较低

-----------------------------------SAX解析工具-----------------------------------------------------

Sun公司提供的。内置在jdk中:org.xml.sax.*

核心的API:

SAXParser类: 用于读取和解析xml文件对象

parse(File f, DefaultHandler dh)       解析xml文件 参数一: File:表示读取的xml文件。 参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类

使用步骤:

//1.创建SAXParser对象 SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); //2.调用parse方法 parser.parse(new File("./src/contact.xml"), new MyDefaultHandler()); //MyDefaultHandler()继承DefaultHandler类,调用重写它的api。

DefaultHandler类的API:由SAX程序自动调用

void startDocument()           在读到文档开始时调用

void endDocument()          在读到文档结束时调用

void startElement(String uri, String localName, String qName, Attributes attributes)          读到开始标签时调用

    qName: 表示开始标签的标签名     attributes: 表示开始标签内包含的属性列表

void endElement(String uri, String localName, String qName)          读到结束标签时调用

    qName: 结束标签的标签名称

void characters(char[] ch, int start, int length)           读到文本内容时调用

    ch: 表示当前读完的所有文本内容     start: 表示当前文本内容的在ch数组开始位置     length: 表示当前文本内容的长度

* * * * * * * * * * * * * * * * * * * * * * * * * * * *DOM解析 vs SAX解析 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

DOM解析

SAX解析

原理: 一次性加载xml文档,不适合大容量的文件读取

原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

DOM解析可以任意进行增删改成

SAX解析只能读取

DOM解析任意读取任何位置的数据,甚至往回读

SAX解析只能从上往下,按顺序读取,不能往回读

DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。

SAX解析基于事件的编程方法。java开发编码相对复杂。

=============================================================================

XML约束

XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定的) XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义) ----------------------------------------------------------------------------------------------------------

XML约束技术:DTD约束:语法相对简单,功能也相对简单。学习成本也低。Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!

----------------------------------------------------------------------------------------------------------

DTD约束

导入dtd方式:

内部导入

外部导入

本地文件系统:

公共的外部导入:

1.约束标签语法: 类别> 或 (元素内容)>   类别:

空标签: EMPTY。    表示元素一定是空元素。普通字符串: (#PCDATA)。   表示元素的内容一定是普通字符串(不能含有子标签)。任何内容: ANY。   表示元素的内容可以是任意内容(包括子标签) 

  (元素内容):       顺序问题:

     表示按顺序出现子标签

      次数问题:

标签 : 必须且只出现1次。

标签+ : 至少出现1次

标签* : 0或n次。

标签? : 0 或1次

2.约束属性语法: 属性类型 默认值>   默认值:

#REQUIRED    属性值是必需的

#IMPLIED      属性不是必需的

#FIXED value    属性不是必须的,但属性值是固定的

  属性类型:控制属性值的

CDATA      表示普通字符串

(en1|en2|..)      表示一定是枚举列表中的一个值

ID     表示在一个xml文档中该属性值必须唯一。且不能以数字开头

 

Schema约束

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML Schema文档中的内容。 对名称空间支持得非常好。 比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。 XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD

 

 

XML Schema 文件自身就是一个XML文件,根结点的名称为Schema,但它的扩展名通常为.xsd。 一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。

名称空间:告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同的标签可以受到不同的schema文档的约束

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3