xml_xml解析 - CSDN
xml 订阅
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 [1]  在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。 [2] 展开全文
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 [1]  在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。 [2]
信息
中文名
可扩展标记语言
其他称呼
可扩展置标语言、可扩展标识语言
中文
可扩标言
外文名
Extensible Markup Language
类    型
标记语言
缩写
XML(也做文件扩展名)
可扩展标记语言简介
可扩展标记语言与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,可扩展标记语言仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:可扩展标记语言极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。 [3]  XML的简单易于在任何应用程序中读/写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果。 [3] 
收起全文
  • Qt 之 XML(DOM)

    2018-05-30 09:50:45
    Qt 可以使用 DOM 模式和 SAX 模式处理 XML 文档。DOM 模式和 SAX 模式的区别之一是,DOM 模式先读取 XML 文档并保存到内存,然后访问 XML 文档的内容。因此,与 SAX 模式相比,DOM 模式占用的内存资源较多,但在修改...

    简述

    DOM(Document Object Model - 文档对象模型)定义了访问和操作 XML 文档的标准方法。

    DOM 把 XML 文档作为树结构来查看,能够通过 DOM 树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素及其文本、属性都被认为是节点。

    | 版权声明:一去、二三里,未经博主允许不得转载。

    详细说明

    QDomDocument 类表示一个 XML 文档。

    QDomDocument 类表示整个 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问。

    因为元素、文本节点、注释、处理指令等不能存在于文档的上下文之外,所以文档类还包含创建这些对象所需的工厂函数。创建的节点对象有一个 ownerDocument() 函数,将它们与在其上下文中创建的文档相关联。最常用的 DOM 类是 QDomNode、QDomDocument、QDomElement 和 QDomText。

    解析的 XML 在内部由对象树表示,可以使用各种 QDom 类访问,所有的 QDom 类只引用内部树中的对象。一旦最后一个 QDom 对象引用它们或 QDomDocument 本身被删除,DOM 树中的内部对象将被删除。

    元素、文本节点等的创建使用此类中提供的各种工厂函数完成。使用 QDom 类的默认构造函数只会导致无法操作或插入到 Document 中的空对象。

    QDomDocument 类具有创建文档数据的多个函数,例如:createElement()、createTextNode()、createComment()、createCDATASection()、createProcessingInstruction()、createAttribute() 和 createEntityReference()。这些函数中的一些具有支持命名空间的版本,即:createElementNS() 和 createAttributeNS()。createDocumentFragment() 函数用于保存文档的各部分,这对于处理复杂文档很有用。

    文档的整个内容使用 setContent() 设置。此函数解析的字符串,作为一个 XML 文档以及创建表示文档的 DOM 树传递。根元素可以使用 documentElement() 来获取,文档的文本表示可以使用 toString() 获取。

    注意:如果 XML 文档较大,DOM 树可能最终会保留大量内存。对于这样的文档,QXmlStreamReader 或 QXmlQuery 类可能是更好的解决方案。

    可以使用 importNode() 将来自另一个文档的节点插入到文档中。

    可以根据 elementsByTagName() 或 elementsByTagNameNS() 获取具有特定标记的所有元素的列表。

    使用

    为了便于演示,使用上节生成的格式化 XML(Blogs.xml):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!--纯正开源之美,有趣、好玩、靠谱。。。-->
    <?xml-stylesheet type="text/css" href="style.css"?>
    <Blogs Version="1.0">
     <Blog>
      <作者>一去丶二三里</作者>
      <主页>http://blog.csdn.net/liang19890820</主页>
      <个人说明>青春不老,奋斗不止!</个人说明>
     </Blog>
    </Blogs>

    详细说明见: Qt之生成XML(QXmlStreamWriter)

    生成

    函数 writeXML() 主要用于生成 XML,将生成的内容写入 Blogs.xml 文件中:

    void writeXML() {
        QDomDocument doc;
    
        QDomProcessingInstruction xmlInstruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"");
        QDomComment comment = doc.createComment(QString::fromLocal8Bit("纯正开源之美,有趣、好玩、靠谱。。。"));
        QDomProcessingInstruction styleInstruction = doc.createProcessingInstruction("xml-stylesheet", "type=\"text/css\" href=\"style.css\"");
        doc.appendChild(xmlInstruction);  // 开始文档(XML 声明)
        doc.appendChild(comment);  // 注释
        doc.appendChild(styleInstruction);  // 处理指令
    
        // 根元素 <Blogs>
        QDomElement root = doc.createElement("Blogs");
        root.setAttribute("Version", "1.0");  // 属性
        doc.appendChild(root);
    
        // 元素 <Blog>
        QDomElement child = doc.createElement("Blog");
        root.appendChild(child);
    
        // 元素 <作者>、<主页>、<个人说明>
        QDomElement author = doc.createElement(QString::fromLocal8Bit("作者"));
        QDomElement home = doc.createElement(QString::fromLocal8Bit("主页"));
        QDomElement instruction = doc.createElement(QString::fromLocal8Bit("个人说明"));
        child.appendChild(author);
        child.appendChild(home);
        child.appendChild(instruction);
    
        // 元素的文本数据
        QDomText authorText = doc.createTextNode(QString::fromLocal8Bit("一去丶二三里"));
        QDomText homeText = doc.createTextNode("http://blog.csdn.net/liang19890820");
        QDomText instructionText = doc.createTextNode(QString::fromLocal8Bit("青春不老,奋斗不止!"));
        author.appendChild(authorText);
        home.appendChild(homeText);
        instruction.appendChild(instructionText);
    
        // 保存 XML 文件
        QString strFile("Blogs.xml");
        QFile file(strFile);
        if (file.open(QFile::WriteOnly | QFile::Text)) { // 只写模式打开文件
            QTextStream out(&file);
            doc.save(out, QDomNode::EncodingFromDocument);
            file.close();
        }
    }

    首先,根据 QDomDocument 构造一个 DOM 文档。通过调用其工厂方法 create…() 创建对应的节点,然后利用 appendChild() 进行添加,进而构建一个对象树。

    解析

    函数 readXML() 主要用于解析 XML,将 Blogs.xml 文件中的内容解析为节点:

    void readXML() {
        QDomDocument doc;
        QFile file("Blogs.xml");
        if (!file.open(QIODevice::ReadOnly))
            return;
        if (!doc.setContent(&file)) {
            file.close();
            return;
        }
        file.close();
    
        /**********根元素 <Blogs>**********/
        QDomElement root = doc.documentElement();
        qDebug() << root.tagName();
    
        if (root.hasAttribute("Version"))  // 属性
            qDebug() << root.attribute("Version");
    
        /**********根元素之上(XML 声明、注释等)**********/
        QDomNode node = root.previousSibling();
        while (!node.isNull()) {
            switch (node.nodeType()) {
            case QDomNode::ProcessingInstructionNode : {
                QDomProcessingInstruction instruction = node.toProcessingInstruction();
                qDebug() << instruction.target() << instruction.data();
                if (QString::compare(instruction.target(), "xml") == 0) { // 开始文档(XML 声明)
                    // ...
                } else if (QString::compare(instruction.target(), "xml-stylesheet") == 0) { // 处理指令
                    // ...
                }
                break;
            }
            case QDomNode::CommentNode : {
                QDomComment comment = node.toComment();
                qDebug() << comment.data();
                break;
            }
            default:
                break;
            }
            node = node.previousSibling();
        }
    
        /**********元素 <Blog>**********/
        node = root.firstChild();  // 返回根节点的第一个子节点
        while (!node.isNull()) {
            if (node.isElement()) {
                QDomElement element = node.toElement();  // 尝试将节点转换为元素
                if (!element.isNull()) {  // 节点的确是一个元素
                    qDebug() << element.tagName();
    
                    /**********遍历元素 <作者>、<主页>、<个人说明>**********/
                    QDomNodeList list = element.childNodes();
                    for (int i = 0; i < list.count(); i++) {
                        node = list.at(i);
                        if (node.isElement()) {
                            element = node.toElement();
                            qDebug() << element.tagName() << element.text();
                            if (QString::compare(element.tagName(), QStringLiteral("作者")) == 0) {
                                // ...
                            } else if (QString::compare(element.tagName(), QStringLiteral("主页")) == 0) {
                                // ...
                            } else if (QString::compare(element.tagName(), QStringLiteral("个人说明")) == 0) {
                                // ...
                            }
                        }
                    }
                }
            }
            node = node.nextSibling();
        }
    }

    和 XML 的生成类似,读取是写入的逆过程。读取的入口根据 QDomDocument 调用 documentElement() 返回的根元素。通过根元素,可以获取到任何我们想要的节点,例如:通过 previousSibling() 向上查找兄弟节点;同理,也可以调用 nextSibling() 向下查找。示例中,我们使用 while() 循环,利用 nextSibling() 反复查找根节点 <Blogs>下的所有 <Blog> 子节点 。在读取 <Blog> 的过程中,通过 childNodes() 返回其下的所有节点,然后进行遍历,tagName() 返回标签的名称,text() 则返回相应的内容。

    注意:进行解析的时候,尽可能的判断节点的类型,通过调用 nodeType() 或者 isElement() 函数均可。

    更多参考

    展开全文
  • XML编程

    2018-10-22 21:38:06
    在现代的开发之中,XML技术无处不在,在各个开发框架中,也都到处充斥着XML配置文件的身影。本课程将为读者讲解XML的产生背景,并且详细分析了HTML与XML的区别、XML核心语法,重点在于XML的解析技术(DOM、SAX、DOM4...
  • XML技术

    2019-06-24 13:12:15
    XML是目前软件工业中组织和表达数据常见的方式,应用极其广泛
  • XML是所有软件开发人员都应该熟悉的技术,如果你还不熟悉就选择这门课程。 第1章 XML概述 什么是XMLXML和HTML之间的区别 第2章 XML编辑工具 跨平台文本编辑工具、Windows平台...
  • xml格式详解

    2019-04-29 17:35:06
    一、xml基础详解: 1、概述: xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。xml是...

    一、xml基础详解:

    1、概述:

        xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。xml是当前处理结构化文档信息中相当给力的技术,xml有助于在服务器之间穿梭结构化数据,这使得开发人员更加得心应手的控制数据的存储和传输。

    Xml用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。Xml是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

    2、xml的特点及作用:

    特点:

    v xml与操作系统、编程语言的开发平台都无关;

    v 实现不同系统之间的数据交互。

    作用:

    v 配置应用程序和网站;

    v 数据交互;

    v Ajax基石。

    在配置文件里边所有的配置文件都是以XMl的格式来编写的。

    跨平台进行数据交互,它可以跨操作系统,也可以跨编程语言的平台。

    Ajax是现在目前比较流行的一个网络交互的技术。Ajax里面最后一个x实际上就是xml的缩写。Xml(Extensible Markup Language)是可扩展标记语言

    一个xml文档必须要有第一行的声明和它的文档元素的描述信息就可以了。

    3、xml声明

    例子:

    注:xml声明一般是xml文档的第一行;xml声明由以下几个部分组成:

    4、根元素

    它是xml文档里面唯一的;它的开始是放在最前面,结束是放在最后面。

    5、元素:

    (1) 所有的xml元素都必须有结束标签;

    (2) xml标签对大小写敏感;

    (3)  xml必须正确地嵌套;

    (4)元素的命名规则:

    名称中可以包含字母、数字或者其他的字符;

    名称不能以数字或者标点符号开始;

    名称中不能包含空格。

    (5)空元素

    6、属性

    (1)语法

    <元素名 属性名=“属性值”/>

    例:<Student ID=“S100”>

           <Name>Tom</Name>

    </Student>

    (2)注意:

    属性值用双引号包裹;一个元素可以有多个属性,它的基本格式为:

    <元素名 属性名=“属性值” 属性名=“属性值”>;

    属性值中不能够直接包含<.”,&。

    7、实体:

    在xml中,一些字符拥有特殊的意义。如果把字符“<”放在xml元素中,会发生错误,这是因为解析器会把它当作新元素的开始,这样会产生xml错误:

    为了避免这个错误,请用实体引用来代替“<”字符:

    xml中5个预定义实体

    8、注释

    注:注释内容中不要出现”--”;不要把注释放在标签中间;注释不能嵌套。

    9、总结:

    (1)xml描述的是文档的内容与语义,而不是文档应当如何显示;

    (2)格式正规(well formed)的xml文档

    遵循如下规则的xml文档称为格式正规的xml文档:

    v 必须有xml声明语句;

    v 必须有且仅有一个根元素;

    v 标签大小写敏感;

    v 属性值用双引号;

    v 标签成对;

    v 空标签关闭;

    v 元素正确嵌套。

    (3)有效的(valid)xml文档。首先xml文档是个格式正规的xml文档,然后又需要满足DTD的要求,这样的xml文档称为有效的xml文档;

    10、解析器

    11、命名空间

    11.1、xml命名空间(xml Namespaces)

    (1)xml命名空间提供避免元素命名冲突的方法。

    (2)在xml中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

    11.2、xml命名空间示例

    (1)使用前缀示例

    与仅仅使用前缀不同,我们为标签添加了一个xmlns属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

    二、DTD技术——xml文件的验证机制

    1、DTD概述:

    文档类型定义——Document Type Definition

    DTD用来描述xml文档的结构,一个DTD文档包含:  

    元素的定义规则;元素之间的关系规则;属性的定义规则。

    2、为什么要用DTD呀

    v 有了DTD,每个xml文件可以携带一个自身格式的描述,所谓格式描述就是我的xml文档里面可以写哪些东西,比如元素、属性;

    v 有了DTD,不同组织的人可以使用一个通用DTD用来交换数据,xml是随意定义的,有了DTD,我们可以限制多个公司之间按照这种DTD的规则来编写xml文档,由于DTD都是统一格式,所以不同的公司之间,不同的组织之间就可以用这种通用的xml文档格式进行交互数据了;

    v 应用程序可以使用一个标准DTD校检从外部接收的xml数据是否有效。

    3、如何编写一个DTD

    DTD分成三大类,第一是内部DTD,第二是外部DTD,第三是内外结合的DTD。

    (1)内部DTD文档(Students.xml):

    (2)就是说这个xml文档里面既包含xml定义,又包含DTD的定义。

    这个[]里面是DTD的定义的内容,就是第一个叫内部DTD文档。

    (3)外部DTD文档(Students.xml  Students.dtd):

    所谓外部就是DTD的定义和我们的xml文档是在不同的文件里面。

    那么外部的DTD如何使用呢?那就需要在前面的xml文档的根元素的上面这个位置跟刚才内部的是一样的,要写上

    这类年改革文档在同一个文件夹下面,就可以了。

    有内部DTD了,为什么还要学习外部DTD呢??

    内部的DTD,它只能验证当前的这个xml文档。那假如说,我们有一个DTD需要验证多个xml文档的话,那就直接使用外部DTD就行。

    (4)内外部DTD文档结合

    4、DTD的具体定义——元素的定义

    元素名称:是指xml文档里面的元素名称

    元素类型:

    (1)EMPTY

    示例第一个是对的,第二个是错误的,因为它有内容了。

    (2)#PCDATA

    第一个是对的,第二个是错误的。

    (3)纯元素类型的DTD语法

    (4)ANY

    5、定义属性的语法结构

    xml文档携带数据的方式,不仅仅是xml的元素的内容,还可以是元素的属性。

    所以说在DTD里面我们有必要对属性进行限制。

    (1)编写属性验证的语法规则:

    (2)属性类型——CDATA

    CDATA是表示属性的值,可以是任何字符,这里包括数字和中文。

    问题一:属性的CDATA与元素的CDATA节有何区别呢??

    属性的CDATA表示属性值是任何的字符,元素里的CDATA节是表示在CDATA节里面的内容不被xml文档进行解析。

    问题二:#PCDATA与CDATA有何区别??

    #PCDATA是限制元素里面的内容是字符类型的,而这个CDATA是限制属性里面的内容是字符类型。

    (3)属性类型——ID

    表明该属性的取值必须是唯一的。

    (4)属性类型——IDREF/IDREFS

    v IDREF是指它的值要指向文档当中其它地方声明的ID。把IDREF当成数据库的外键,把ID当成主键理解就行;

    v IDREFS同IDREF,但是可以具有由空格分开的多个引用;

    (5)属性类型——Enumerated

    预先定义了一些值,属性的值必须在所列出的值的范围内

    (6)属性特点——#REQUIRED

    它表示元素的所有的实例都必须有该属性的值(NOT NULL)

    (7)属性特点——#IMPLIED

    这就表示该属性的值是可以被忽略的。

    (8)属性特点——#FIXED

    元素中该属性的值必须为指定的固定值。

    (9)属性特点——Default

    为属性提供一个默认的值。

    三、实体

    1、实体概述

    实体,简单理解就是C#中的常量,我们在DTD里面定义,在xml文档里面去使用。(实际上就是自定义实体,与前面的预定义实体差不多是一回事)。

    2、实体的定义

    四、xml之Schema技术

    1、Schema概述:xml Schema是用一套预先规定的xml元素和属性创建的,这些元素和属性定义了xml文档的结构和内容模式。Xml Shema规定xml文档实例的结构和每个元素/属性的数据类型。

    理解:对于Schema来讲,我们可以将shema比喻成为是表结构。在表结构里,定义一些数据的限制要求。然后我们xml文档呢就相当于是数据表将来要存储的数据u,也就是数据库里面的数据表数据了,所以整体来讲的话schema它就是用于验证xml文档的。

    2、有了DTD,为什么要用Schema呢?

    (1)DTD的局限性

    DTD不遵守xml语法(写xml文档实例时用一种语法,写DTD的时候用另外一种语法);DTD数据类型有限(与数据库数据类型不一致);DTD不可扩展;DTD不支持命名空间(命名冲突)。

    (2)Schema的新特性

    Shema基于xml语法的;Shema可以用能处理xml文档的工具处理;Schema大大扩充了数据类型,可以自定义数据类型;Schema支持元素的继承——Object-Oriented;Shema支持属性组。

    3、Shema(模式):其作用与DTD一样,也是用于验证xml文档的有效性,只不过它提供了比DTD更强大的功能和更细粒度的数据类型,另外Schema还可以自定义数据类型。此外,Schema也是一个xml文件,而DTD则不是。

    4、所有的Schema文档,其根元素必须为Schema。

    5、Schema的文档结构

    6、Schema的数据类型

    6.1、Schema的数据类型概述

    6.2、简单类型:

    (1)内置的数据类型:

    基本的数据类型;

    扩展的数据类型;

    (2)用户自定义简单类型(通过simpleType定义)。

    6.3、复合类型(通过complexType定义)

    6.4、数据类型的特征

    7、Schema的元素类型

    7.1、Schema根元素

    作用:包含已经定义的Schema

    用法:<xs:schema>

    属性:xmlns/targetNamespace/elementFormDefault

    例子:

    7.2、element元素

    作用:声明一个元素

    属性:name/type/ref/minOccurs/maxOccurs

    例子:

    7.3、group元素

    作用:把一组元素声明组合在一起

    属性:name

    例子:

    7.4、attribute元素

    作用:声明一个属性

    属性:name/type/use/default/fixed

    例子:

    7.5、attributeGroup元素

    作用:把一组属性声明组合在一起

    属性:name/ref

    例子:

    7.6、simpleType元素

    作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息

    属性:name

    常用的两种方式:restriction——>一个约束;list——>从列表中选择。

    (1)simpleType元素的子元素——>restriction

    子元素为:<xs:restriction>——>定义一个约束条件

    例子:

    (2)simpleType元素的子元素——>list

    子元素为:<xs:list>——>从一个特定数据类型的集合中选择定义一个简单类型元素。

    例子:

    7.7、complexType元素

    作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息。

    属性:name

    常用的两种方式:sequence——>一个序列;choice——>设置选择项。

    (1)complexType元素——sequence

    作用:给一组元素一个特定的序列

    例子:

    (2)complexType元素——choice

    作用:把一组属性声明组合在一起,以便可以被复合类型应用

    属性:name/ref

    例子:

    7.8、complexType与simpleType区别

    simpleType类型的元素中不能包含元素或者属性;

    当需要声明一个元素的子元素和或属性时,用complexType;

    当需要基于内置的基本数据类型定义一个新的数据类型时,用simpleType。
    --------------------- 
    原文:https://blog.csdn.net/com_ma/article/details/73277535 

    展开全文
  • 本课程共11个教学视频,10小时授课时间,该课是在学习完数据库,JAVA,JSP等课程后,为后面学习SSH框架,WEB Servic等技术的基础课程;深入浅出的讲解,大量的课后练习与实训项目,课程PPT,源代码已经全部上传到...
  • XML中的&使用

    2019-01-03 15:55:30
    由于项目需要, 将参数写进xml文件中,参数中包含"&amp;"符号,默认使用txt打开。解析xml时,发现“&amp;”符不存在了。后来网上 搜索才发现原来xml中的“&amp;”需要使用”&amp;amp;...

    由于项目需要, 将参数写进xml文件中,参数中包含"&"符号,默认使用txt打开。解析xml时,发现“&”符不存在了。后来网上 搜索才发现原来xml中的“&”需要使用”&amp;“这种形式,解析的时候才不会出错。

    另外,其他特殊符号也记录一下:

    &lt;  小于号

    &gt;  大于号

    &amp; & 

    &apos;  单引号

    &quot;  双引号

    这里 借鉴了两篇 文章:(1):https://blog.csdn.net/liduanwh/article/details/79397506

                                               (2):https://blog.csdn.net/wu920604/article/details/74990835

    展开全文
  • 代码格式XML

    2020-07-30 23:33:32
    NULL 博文链接:https://sc-gzg.iteye.com/blog/1074535
  • xml中使用&、>、<等报错了,应该怎么解决

    文章转载自:https://blog.csdn.net/wu920604/article/details/74990835

    • 在我们的xml文档中,每当数据中有’<’、’&'等符号时,封装的XML就无法解析。但是发现XML里有CDATA属性,问题迎刃而解!在XML文档中的所有文本都会被解析器解析。 只有在CDATA部件之内的文本会被解析器忽略。

    • 解析数据 XML 解析器通常情况下会处理XML文档中的所有文本。 当XML元素被解析的时候,XML元素内部的文本也会被解析:
      <message>This text is also parsed</message>
      XML解析器这样做的原因是XML元素内部可能还包含了别的元素,象下面的例子,name元素内部包含了first和last两个元素:
      <name><first>Bill</first><last>Gates</last></name>
      解析器会认为上面的代码是这样的:
      <name> <first>Bill</first> <last>Gates</last> </name>

    • 转义字符不合法的XML字符必须被替换为相应的实体。 如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该象下面那样书写代码:
      if salary < 1000 then
      为了避免出现这种情况,必须将字符"<" 转换成实体,象下面这样:
      if salary < 1000 then 下面是五个在XML文档中预定义好的实体:
      &lt; < 小于号
      &gt; > 大于号
      &amp; & 和
      &apos; ' 单引号
      &quot; " 双引号

    • 实体必须以符号"&“开头,以符号”;“结尾。 注意:
      只有”<" 字符和"&“字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。

    • CDATA部件在CDATA内部的所有内容都会被解析器忽略。如果文本包含了很多的”<“字符和”&“字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。一个 CDATA 部件以”<![CDATA[" 标记开始,以"]]>“标记结束:

      <![CDATA[ aaa ]]>在前面的例子中,所有在CDATA部件之间的文本都会被解析器忽略。
      CDATA注意事项: CDATA部件之间不能再包含CDATA部件(不能嵌套)。如果CDATA部件包含了字符”]]>" 或者"<![CDATA[" ,将很有可能出错哦。同样要注意在字符串"]]>"之间没有空格或者换行符。
      案例:



    展开全文
  • 在我们的xml文档中,每当数据中有'<'、'&'等符号时,封装的XML就无法解析。但是发现XML里有CDATA属性,问题迎刃而解!在XML文档中的所有文本都会被解析器解析。 只有在CDATA部件之内的文本会被解析器忽略。-...

    在我们的xml文档中,每当数据中有'<'、'&'等符号时,封装的XML就无法解析。但是发现XML里有CDATA属性,问题迎刃而解!在XML文档中的所有文本都会被解析器解析。 只有在CDATA部件之内的文本会被解析器忽略。--------------------------------------------------- 解析数据 XML 解析器通常情况下会处理XML文档中的所有文本。 当XML元素被解析的时候,XML元素内部的文本也会被解析:
     <message>This text is also parsed</message> 
    XML解析器这样做的原因是XML元素内部可能还包含了别的元素,象下面的例子,name元素内部包含了first和last两个元素: 
    <name><first>Bill</first><last>Gates</last></name>
     解析器会认为上面的代码是这样的: 
    <name> <first>Bill</first> <last>Gates</last> </name> --------------------------------------------------- 转义字符不合法的XML字符必须被替换为相应的实体。 如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该象下面那样书写代码:
     <message>if salary < 1000 then</message> 
    为了避免出现这种情况,必须将字符"<" 转换成实体,象下面这样:
     <message>if salary &lt; 1000 then</message> 下面是五个在XML文档中预定义好的实体:

    &lt; < 小于号
    &gt; > 大于号
    &amp; & 和
    &apos; ' 单引号
    &quot; " 双引号

    实体必须以符号"&"开头,以符号";"结尾。 注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。--------------------------------------------------- CDATA部件在CDATA内部的所有内容都会被解析器忽略。如果文本包含了很多的"<"字符和"&"字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束: 
    <![CDATA[ aaa ]]> 在前面的例子中,所有在CDATA部件之间的文本都会被解析器忽略。
     CDATA注意事项: CDATA部件之间不能再包含CDATA部件(不能嵌套)。如果CDATA部件包含了字符"]]>" 或者"<![CDATA[" ,将很有可能出错哦。同样要注意在字符串"]]>"之间没有空格或者换行符。
    案例:


    --------------------- 
    作者:开着拖拉机的梦想家 
    来源:CSDN 
    原文:https://blog.csdn.net/wu920604/article/details/74990835 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • XML

    2019-10-13 11:27:09
    XML:可扩展的标记语言。 XML用途: 统一的数据文件规范。统一 统一的解析API。易于使用 使用非常广泛。大小写敏感 XML实体引用: &lt; :< (小于) &gt; :> (大于) &amp :&(与) ...
  • 1.XML历史 gml(1969)-&gt;sgml(1985)-&gt;html(1993)-&gt;xml(1998) 1969 gml(通用标记语言),主要目的是要在不同的机器之间进行通信的数据规范 1985 sgml(标准通用标记语言) 1993 html...
  • XML,Extensible Markup Language,扩展性标识语言。文件的后缀名为:.xml 据说,java是一门专业操作XML的语言。 是干啥用的? 为了便于不同应用、不同平台之间的数据共享和通信。   具体点的作用为: (1)可作为一...
  • 什么是XML文件

    2018-07-09 09:51:13
    什么是XMLXML是由万维网联盟(W3C)创建的标记语言,用于定义编码人类和机器可以读取的文档的语法。它通过使用定义文档结构的标签以及如何存储和传输文档来实现这一点。将它与您可能熟悉的另一种标记语言(用于...
  • 【前端】XML

    2019-04-24 08:52:22
    什么是XMLXML 指可扩展标记语言(eXtensible Markup Language)。 XML 是一种很像HTML的标记语言。 XML 的设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有...
  • 转载自: ...XML文件创建格式 <?xml version="1.0" encoding="utf-8" ?> <root> <part id = "01" name="选项一"> <name>我是徐茅山<...
  • Android中解析XML

    2016-07-22 12:10:39
    XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。在Android中,...
  • 一:web.xml加载过程  简单说一下,web.xml的加载过程。当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等)。首先会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动...
  • perl解析XML的性能比较

    2015-11-27 13:20:27
    perl XML模块 perl解析XML实现方式有很多模块。下面总结一些。 模块 说明 XML::Simple 用于读写 XML 的普通 API,最好与 XML 格式的配置文件一起使用 XML::LibXML gnome libxml2 库的 ...
  • Java解析XML的四种方法详解 XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关...
1 2 3 4 5 ... 20
收藏数 3,023,151
精华内容 1,209,260
关键字:

xml