xml学习小结

前端之家收集整理的这篇文章主要介绍了xml学习小结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


任何安装的软件,都不要使用中文路径和带空格等特殊字符的路径。

最好专门用一个盘来存储工作上的内容

用一个专门的文件夹来存储和管理安装的软件。

@H_301_29@

对数组进行最大最小值判断时,初始值最好使用数组中的值。

@H_301_29@

@H_301_29@XML 英文全称为@H_301_29@ExtensibleMarkup Language

@H_301_29@

  • @H_301_29@XML语言中,它允许用户自定义标签。每一个标签用于描述一段数据;

  • 一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间又可以嵌套其它标签,利用标签间的嵌套关系来保存数据之间的上下级关系;

  • 由于@H_301_29@xml实质上是一段字符串,计算机可以十分方便的对他进行操作,开发人员也可以方便的阅读,因此可以说这是一种对人、对计算机都友好的数据存储格式,所以@H_301_29@XML迅速普及,成为了一种非常常见的数据存储格式,在许多应用场景中得到应用。

    @H_301_29@

    @H_301_29@XML:用来存储和传递数据的。

    @H_301_29@XML本质上是一种数据存储格式。

    @H_301_29@XML中,所有标签都必须是闭合的。

    @H_301_29@XML标签可以嵌套出现,但是不允许交叉出现。

    @H_301_29@XML本质上是一段字符串,具有跨平台性。因此@H_301_29@XML经常用来在不同系统之间进行传递数据。@H_301_29@XML也会被用作一些应用程序的配置文件

    @H_301_29@XML中的数据,具有层次性。

    在一些特殊情况下@H_301_29@xml也可以用作数据库的替代工具来使用。

    @H_301_29@

  • @H_301_29@XML是一种存储数据的格式,我们可以将遵照这种数据格式写出来的@H_301_29@XML数据保存到一个文件中去,并将文件的后缀名设定为@H_301_29@.xml,那么这样的保存了@H_301_29@XML数据的文件就叫做@H_301_29@xml文件

  • @H_301_29@xml文件是保存@H_301_29@XML数据的一种方式,@H_301_29@XML数据也可以以其他的方式存在(如在内存中构建@H_301_29@XML数据),不要将@H_301_29@XML语言狭隘的理解成@H_301_29@xml文件

    浏览器中一般都内置了@H_301_29@xml解析器。可以用浏览器直接打开@H_301_29@xml文件来对@H_301_29@xml文件进行校验。

    @H_301_29@xml的语法:

  • 一个@H_301_29@XML文件分为如下几部分内容

    • 文档声明

    • 元素

    • 属性

    • 注释@H_301_29@

    • @H_301_29@CDATA、特殊字符

    • 处理指令(@H_301_29@processinginstruction

  • @H_301_29@XML的文档声明是用来声明文档基本属性的,@H_301_29@XML解析器将根据文档声明决定如何正确解析一个@H_301_29@XML

    • 通常来说一个@H_301_29@XML必须包含且只包含一个文档声明

    • 文档声明必须处在@H_301_29@XML的第一行,前面不能有其他内容

    • 如果一个@H_301_29@XML不包含文档声明则称这样的@H_301_29@XML为格式不良好的@H_301_29@XML

    • 在许多时候即使不包含文档声明,@H_301_29@XML也可以被正常使用,但是这是不符合标准的,存在风险,因此强烈推荐大家在书写@H_301_29@XML时写上文档声明。

  • 最简单写法:

    • @H_301_29@<?xml version="1.0" ?>

    • @H_301_29@version 代表当前@H_301_29@xml所遵循的@H_301_29@xml标准。

    • 在第二个问号之前应该有一个空格

    • 注意:问号、引号、空格都必须为英文半角

  • @H_301_29@encoding属性说明文档的字符编码:

    • @H_301_29@<?xml version="1.0" encoding="GB2312" ?>

    • @H_301_29@encoding告知解析器使用何种编码解析当前@H_301_29@xml

    • @H_301_29@encoding默认值为@H_301_29@ISO8859-1

  • @H_301_29@standalone属性说明文档是否独立:

    • @H_301_29@<?xml version="1.0" encoding="GB2312" standalone="yes" ?>

    • @H_301_29@standalone表示当前@H_301_29@xml文档是否是一个独立文档,当为@H_301_29@yes时表示是一个独立文档,当为@H_301_29@no时表示当前文档需要其他文档支持

      @H_301_29@xml元素

  • 由于在@H_301_29@XML中,空格和换行都作为原始内容被处理,所以,在编写@H_301_29@XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。

  • 一个@H_301_29@XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

    • 区分大小写,例如,@H_301_29@<P>@H_301_29@<p>是两个不同的标记

    • 不能以数字或标点符号@H_301_29@"_"开头。

    • 不能以@H_301_29@xml(@H_301_29@XML、或@H_301_29@Xml @H_301_29@)开头。

    • 不能包含空格。

    • 名称中间不能包含冒号(@H_301_29@:)。

  • 属性值一定要用双引号(@H_301_29@")或单引号(@H_301_29@')引起来

    @H_301_29@ <chinacapital='beijing'/>

  • 定义属性名必须遵循与元素相同的命名规范

    @H_301_29@Xml文件中的注释采用:@H_301_29@“@H_301_29@<!--注释@H_301_29@-->格式。

  • 注释不能出现在文档声明之前(因为@H_301_29@XML要求文档声明必须在第一行,之前不能有其他内容

    @H_301_29@ 实验:

    @H_301_29@ 分别使用@H_301_29@ie@H_301_29@chrome测试文档声明前出现注释的情况

  • 注释不能嵌套,例如:

    @H_301_29@ <!--大段注释

    @H_301_29@ ……

    @H_301_29@ <!--局部注释@H_301_29@-->

    @H_301_29@ -->

    @H_301_29@CDATA

  • @H_301_29@XML中一段内容不希望被解析器解析时可以使用@H_301_29@CDATA区将其包住

  • 当解析器遇到@H_301_29@CDATA区时会将其内容当作文本对待,不会进行解析

  • 语法:@H_301_29@<![CDATA[内容 @H_301_29@]]>

  • 场景一:在输入框中输入的用户名,密码,使用@H_301_29@XML保存传递到后台

    @H_301_29@Xml文档申明之前不能有任何内容

    注释不能写在标签之间

    只用来展示内容的少部分特殊字符用转意字符

    大量的转意字符的使用,用@H_301_29@CDATA区域

    转义字符

    处理指令:

  • 处理指令,简称@H_301_29@PI @H_301_29@processinginstruction)。处理指令用来指挥解析引擎如何解析@H_301_29@XML文档内容

  • 例如,在@H_301_29@XML文档中可以使用@H_301_29@xml-stylesheet指令,通知@H_301_29@XML解析引擎,应用@H_301_29@css文件显示@H_301_29@xml文档内容@H_301_29@ <?xml-stylesheet type="text/css"href="1.css"?>

  • 处理指令必须以“@H_301_29@<?”作为开头,以“@H_301_29@?>”作为结尾,

  • @H_301_29@XML文档声明语句就是最常见的一种处理指令。

    @H_301_29@Xml约束

  • 什么是@H_301_29@XML约束?

    • @H_301_29@xml技术里,可以编写一个文档来约束一个@H_301_29@xml文档的写法,这称之为@H_301_29@XML约束。

  • @H_301_29@XML约束的作用

    • 约束@H_301_29@xml文档的写法

    • @H_301_29@xml进行校验

  • 常见的@H_301_29@XML约束技术

    @H_301_29@XML DTD

    @H_301_29@XML Schema

    @H_301_29@DTD(Document Type Definition),全称为文档类型定义。

    在解析@H_301_29@xml的时候,一般都需要去除表情内容中的字符串内容前后的空格

    默认情况下,@H_301_29@ie浏览器的@H_301_29@xml校验是关闭的,必须通过@H_301_29@Javascrip脚本开启@H_301_29@xml校验

    @H_301_29@varxmldom = new ActiveXObject(“Microsft.XMLDOM”)

    @H_301_29@xmldom.validateOnParse = “true”;

    @H_301_29@xmldom.load(文件@H_301_29@);//加载要校验的文件

    @H_301_29@var msg = xmldom.parseError.reason;

    @H_301_29@var line = xmldom.parseError.line;

    @H_301_29@document.write(“错误所在行@H_301_29@”+line);

    @H_301_29@document.write(“<br/>”);

    @H_301_29@document.write(“错误信息@H_301_29@”+msg);

    引入@H_301_29@DTD约束的两种方式

  • @H_301_29@DTD的约束可以定义在@H_301_29@XML文件内部,如果@H_301_29@DTD被定义在了@H_301_29@XML内部则@H_301_29@XML文档声明中@H_301_29@standalone="yes"

  • @H_301_29@DTD的约束也可以定义在一个独立的后缀为@H_301_29@.dtd文件中再由@H_301_29@xml文件引入,此时引入此@H_301_29@dtd@H_301_29@xml文档声明中@H_301_29@standalone="no"

  • 注意@H_301_29@.dtd文件应使用@H_301_29@UTF-8@H_301_29@Unicode编码

    @H_301_29@XML文件使用@H_301_29@ DOCTYPE 声明语句来指明它所遵循的@H_301_29@DTD文件@H_301_29@DOCTYPE声明语句有两种形式:

    • 当引用的文件在本地时,采用如下方式:

      @H_301_29@ <!DOCTYPE文档根结点@H_301_29@ SYSTEM "DTD文件@H_301_29@URL">

      @H_301_29@ @H_301_29@ 例如:@H_301_29@<!DOCTYPE书架@H_301_29@ SYSTEM “book.dtd”>

    • 当引用的文件是一个公共的文件时,采用如下方式:@H_301_29@

      @H_301_29@ <!DOCTYPE文档根结点@H_301_29@ PUBLIC "DTD名称@H_301_29@" "DTD文件@H_301_29@URL">

      @H_301_29@ 例如:@H_301_29@<!DOCTYPEweb-app PUBLIC

      @H_301_29@ "-//SunMicrosystems,Inc.//DTD Web Application 2.3//EN"

      @H_301_29@ "http://java.sun.com/dtd/web-app_2_3.dtd">

      @H_301_29@xml文件的学习重点,@H_301_29@CRUD

      主流的@H_301_29@xml解析方式:@H_301_29@DOM方式和@H_301_29@SAX解析方式。

      @H_301_29@DOM解析方式:把整个@H_301_29@xml文档读入到内存中,每一个内容都创建一个对象来与之对应。

      @H_301_29@Dom解析过程中,会创建一个@H_301_29@document对象来代表整个文档。@H_301_29@xml文档的根标签会挂载在@H_301_29@document对象之下,其他标签挂载在根标签下。

      整个@H_301_29@xml文档在@H_301_29@dom解析过程中会形成一个倒立的文档树。

      @H_301_29@dom解析过程中标签的每个属性,都会被解析成一个对象。

      @H_301_29@dom解析过程中,一个节点可以任意访问其他节点的。

      @H_301_29@dom解析的缺点:占用内存比较大@H_301_29@ 第一次解析时比较耗费时间

      @H_301_29@dom解析的优点:方便的对节点进行增删改查操作。只需解析一次,可以多次获取数据。

      @H_301_29@Dom解析是一种思想@H_301_29@

      @H_301_29@document对应于@H_301_29@ ----Document

      标签对应于@H_301_29@ ---Element

      标签内容对应于@H_301_29@ ---CharacterData

      表情属性对应于@H_301_29@ ---Attributed Attr

      @H_301_29@XML中所有的节点都是@H_301_29@Node的子类或者子接口。

      @H_301_29@dom解析过程中所有的@H_301_29@xml节点都可以进行增删改查的操作

      @H_301_29@SAX解析方式:

      @H_301_29@SAX解析主要包括解析器和事件处理器。

      解析器负责逐行扫描@H_301_29@xml文档,每发现一个内容,都会去调用文档解析开始的方法

      发现标签体时,调用发现标签方法

      发现结束标签时,调用结束标签的处理方法

      最后调用文档解析结束的方法

      事件处理器负责处理对应的事情。

      属性会被当作开始标签的参数传入到开始标签处理方法中。

      优点:占用内存少,解析速度快

      缺点:每次都要重新解析。只能进行查找数据的操作,不能进行增删操作。

      可以通过对象来存储解析内容

      @H_301_29@SAX解析@H_301_29@xml的案例

      import java.io.IOException;

      import javax.xml.parsers.ParserConfigurationException;

      import javax.xml.parsers.SAXParser;

      import javax.xml.parsers.SAXParserFactory;

      import org.xml.sax.Attributes;

      import org.xml.sax.SAXException;

      import org.xml.sax.XMLReader;

      import org.xml.sax.helpers.DefaultHandler;

      public class SaxDemo {

      static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {

      // TODO Auto-generatedmethod stub

      //创建解析器工厂

      SAXParserFactory saxFactory = SAXParserFactory.newInstance();

      获取解析器对象

      SAXParser parse =saxFactory.newSAXParser();

      获取xml读取器

      XMLReader xmlReader =parse.getXMLReader();

      设置时间处理器

      xmlReader.setContentHandler(new MyContentHandler());

      读取文件

      xmlReader.parse("book.xml");

      }

      }

      class MyContentHandler extends DefaultHandler{

      private String elementName="";

      @Override

      void characters(char[] ch,int start,85); font-family:'Courier New'; font-size:12pt">int length)

      throws SAXException {

      Auto-generatedmethod stub

      if ("书名".equals(elementName)) {

      String str = new String(ch,start,length);

      System.out.println(str);

      }

      }

      void startElement(String uri,String localName,String qName,

      Attributes attributes) Auto-generatedmethod stub

      elementName = qName;

      }

      void endElement(String uri,String qName)

      elementName = "";

      }

      }

      @H_301_29@JAXP解析@H_301_29@xml

  • @H_301_29@JAXP 开发包是@H_301_29@J2SE的一部分,它由@H_301_29@javax.xml@H_301_29@org.w3c.dom @H_301_29@org.xml.sax 包及其子包组成

  • @H_301_29@javax.xml.parsers 包中的@H_301_29@DocumentBuilderFactory用于创建@H_301_29@DOM模式的解析器对象 @H_301_29@DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个@H_301_29@newInstance方法,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

    调用 @H_301_29@DocumentBuilderFactory.newInstance()方法得到创建 @H_301_29@DOM 解析器的工厂。

    @H_301_29@ DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory.newInstance();

  • 调用工厂对象的 @H_301_29@newDocumentBuilder方法得到 @H_301_29@DOM 解析器对象。

    @H_301_29@ DocumentBuilderbuilder = builderFactory.newDocumentBuilder();

  • 调用 @H_301_29@DOM 解析器对象的 @H_301_29@parse()方法解析 @H_301_29@ XML 文档,得到代表整个文档的@H_301_29@Document 对象,进行可以利用@H_301_29@DOM特性对整个@H_301_29@XML文档进行操作了。

    @H_301_29@ Documentdoc = builder.parse(new File("book.xml"));

    案例

    import javax.xml.parsers.DocumentBuilder;

    import javax.xml.parsers.DocumentBuilderFactory;

    import javax.xml.parsers.ParserConfigurationException;

    import org.w3c.dom.Document;

    import org.w3c.dom.Element;

    import org.w3c.dom.NodeList;

    import org.xml.sax.SAXException;

    class JaxpDemo {

    创建解析器工厂

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    创建解析器

    DocumentBuilder builder = factory.newDocumentBuilder();

    设置需要解析的文档,获取文档解析对象

    Document document =builder.parse("book.xml");

    获取根节点

    //Element root = document.getDocumentElement();

    根据标签获取元素

    NodeList booklist = document.getElementsByTagName(");

    根据脚标,获取书(元素)

    Element book = (Element) booklist.item(0);

    获取标签

    String bookname = book.getTextContent();

    System.out.println(bookname);

    }

    @H_301_29@DOM编程

  • @H_301_29@DOM模型@H_301_29@(document object model)

    • @H_301_29@DOM解析器在解析@H_301_29@XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个@H_301_29@Node对象@H_301_29@(节点@H_301_29@),并以树的结构组织起来,存储到内存中。

    • @H_301_29@JAXP中的文档对象:

    • @H_301_29@Node接口

  • @H_301_29@Node是一个接口,代表文档树中的单个节点,其他文档类都是@H_301_29@Node接口的实现

  • @H_301_29@Node接口上提供了获取父节点、获取子节点的方法,由此可以遍历文档树。

  • @H_301_29@Node接口定义了增删改查节点方法由此可以修改文档树。

    @H_301_29@Node getFirstChild()

  • @H_301_29@此节点的第一个子节点。

  • @H_301_29@Node getLastChild()

  • @H_301_29@此节点的最后一个节点。@H_301_29@
    getAttributes()

  • @H_301_29@包含此节点的属性@H_301_29@NamedNodeMap(如果它是@H_301_29@ Element);否则为@H_301_29@ null

  • @H_301_29@Node appendChild(NodenewChild)

    @H_301_29@ 将节点@H_301_29@ newChild 添加到此节点的子节点列表的末尾。

  • @H_301_29@NodeList getChildNodes()

    @H_301_29@ 包含此节点的所有子节点的@H_301_29@ NodeList

    @H_301_29@getAttributes()

    @H_301_29@包含此节点的属性@H_301_29@ NamedNodeMap(如果它是@H_301_29@ Element);否则为@H_301_29@ null

  • @H_301_29@Node removeChild(NodeoldChild)

    @H_301_29@ 从子节点列表中移除@H_301_29@oldChild 所指示的子节点,并将其返回。

  • @H_301_29@Node replaceChild(NodenewChild,Node oldChild)

    @H_301_29@ 将子节点列表中的子节点@H_301_29@ oldChild 替换为@H_301_29@ newChild,并返回@H_301_29@ oldChild 节点。

  • @H_301_29@void setTextContent(StringtextContent)

    @H_301_29@ 属性返回此节点及其后代的文本内容

    对文档树的增删该查只是对内存中的对象进行的操作,如果希望将修改@H_301_29@xml文件起作用,就需要进行@H_301_29@XML文档更新

  • @H_301_29@javax.xml.transform包中的@H_301_29@Transformer类用于把代表@H_301_29@XML文件@H_301_29@Document对象转换为某种格式后进行输出

    • 获取@H_301_29@Transformer工厂@H_301_29@

      @H_301_29@ TransformerFactorytransformerFactory = TransformerFactory.newInstance();

    • 获取@H_301_29@Transfomer对象

      @H_301_29@ Transformertransformer =transformerFactory.newTransformer();

    • 创建代表输入和输出@H_301_29@Source@H_301_29@Result对象

      @H_301_29@ Sourcesource = new DOMSource(doc);

      @H_301_29@ Resultresult = new StreamResult(new FIle("book.xml"));

    • 使用@H_301_29@Transformer@H_301_29@ XMLSource 转换为@H_301_29@ Result

      @H_301_29@ transformer.transform(source,Result)

      看开源@H_301_29@jar包之后的学习步骤:(下载开源@H_301_29@jar包,解压后找到@H_301_29@docs

  1. 引入核心@H_301_29@jar

  2. 查看快速使用案例

  3. 查看快速使用案例中用到的类的作用和使用方法

  4. 自己做出一个案例来

原文链接:https://www.f2er.com/xml/295667.html

猜你在找的XML相关文章