1.XML报文 |
您所在的位置:网站首页 › 请求报文什么意思 › 1.XML报文 |
目录 XML XML语法: XML解析(java): DOM解析原理: SAX解析原理: XML约束 DTD约束 Schema约束 XMLExtend 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 |