微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

百战程序员-xml

  1、用自己的语言说出,为什么需要XML?  

    

  XML 是一种元标注语言,该语言提供一种描述结构数据的格式。这有助于更精确地声明内容,方便跨越多种平台的更有意义的搜索结果。此外,XML 将起用新一代的基于 Web 的数据查看和处理应用程序。

  XML 提供可以广泛执行并易于配置的数据的结构表示。XML 是 万维网协会(W3C) 定义的用于优化 Web 上的传输的 SGML 的子集,XML 确保结构数据是一致的并独立于应用程序或供应商。由此产生的互用性正在启动新一代的商业和电子商务 Web 应用程序。

  XML 提供可以编码各种情况(从简单至复杂)的内容、语义和架构的数据标准,可被用于标注以下对象:

  • 普通文档。
  • 诸如约会记录或采购定单之类的结构记录。
  • 具有数据和方法的对象,如 Java 对象或 ActiveX 控件的持续型表单。
  • 数据记录,如查询的结果集。
  • 有关 Web 站点的元内容,如“频道定义格式 (CDF)”。
  • 图形表示,如应用程序的用户界面。
  • 标准架构实体和类型。
  • Web 上的信息与用户间的所有链接

  2、用自己的话描述XML有什么作用?

    

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。

  • XML 把数据从 HTML 分离

如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。

通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。

通过使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容

在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。

XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法

这让创建不同应用程序可以共享的数据变得更加容易。

  • XML 简化数据传输

通过 XML,可以在不兼容的系统之间轻松地交换数据。

对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。

由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。

  • XML 简化平台的变更

升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。

XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。

  • XML 使您的数据更有用

XML 用于创建新的 Internet 语言

很多新的 Internet 语言是通过 XML 创建的:

XHTML - 最新的 HTML 版本

WSDL - 用于描述可用的 web service

WAP 和 WML - 用于手持设备的标记语言

RSS - 用于 RSS Feed 的语言

RDF 和 OWL - 用于描述资源和本体

SMIL - 用于描述针针对 web 的多媒体

  3、XML文件的基本语法要求有哪些?

    

  1、注释

XML的注释与HTML的注释相同,以“<!--”开始,以“-->”结束。

  2、区分大小写

在HTML中是不区分大小写的,而XML区分大小写,包括标记属性,指令等。

  3、标记

XML标记与HTML标记相同,“<”表示一个标记的开始,“>” 表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。

在XML中不含任何内容标记叫做空标记,格式为:<标记名称/>

  4、属性

XML属性的使用与HTML属性基本相同,但需要注意的是属性值要加双引号。

  5、实体引用

实体引用是指分析文档时会被字符数据取代的元素,实体引用用于XML文档中的特殊字符,否则这些字符会被解释为元素的组成部分。例如,如果要显示“<”,需要使用实体引用“&lt;”否则会被解释为一个标记的起始。

XML中有5个预定义的实体引用,如表 4.1所示。

表 4.1 XML预定义的实体引用

&lt;

&gt;

&quot;

"

&apos;

'

&amp;

&

 

  6、CDATA

在XML中由一个特殊的标记CDATA,在CDATA中所有文本都不会被XML处理器解释,直接显示在浏览器中,使用方法如下:

<![CDATA[

这里的内容可以直接显示

]]>

  7、处理指令

处理指令使用来给处理XML文件的应用程序提供信息的,处理指令的格式如下:

<?处理指令名称 处理指令信息?>

              例如,XML声明就是一条处理指令:

<?xml version="1.0" encoding="gb2312"?>

其中,“xml”是处理指令名称,version="1.0" encoding="gb2312"是处理指令信息。

  4、【上机】如下信息,能不能用JSON来表示?能不能用XML表示?请写出代码

        “我叫高小七,今年18了,我喜欢如花姑娘,也喜欢我的宠物旺财”

    可以

  5、【上机】CDATA有什么作用? 写出测试代码

    

所有 XML 文档中的文本均会被解析器解析,比如’& nbsp;’将不像其他地方那样被转换成空格。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。 
在 XML 元素中,”<” 和 “&” 是非法的。 
“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。 
“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。 
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。 
CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

  6、dtd技术有什么作用? schema技术什么作用?二者之间有什么关系?

①DTD(Document Type DeFinition文档类型定义)是一组机器可读的规则,它们定义XML或HTML的特定版本中允许有什么,不允许有什么。在解析网页时,浏览器将使用这些规则检查页面的有效性并且采取相应的措施。(由DTD中定义的文档类型影响)

②DTD是对HTML文档声明,还会影响浏览器的渲染模式(工作模式)。(由页面中书写DTD的方式影响)

  • DTD规定XMLHTML中的标签和语法

1)HTML 4.01规定了三种文档类型:Strict、Transitional 以及 Frameset

2)XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。

3)HTML5只规定了一种文档类型:

  • DTD会影响浏览器的渲染模式:

 

Schema的作用:

  • · 定义与作用
    • Schema描述XML文档的结构
    • 是基于XML的DTD替代者
    • Schema也称为:XML Schema DeFinition(XSD)
    • Schema要比DTD更强大

 

  • · Schema与DTD的异同
    • Schema是DTD的继任者
    • Schema将来会取代DTD
    • Schema优势:
      • 针对未来的需求进行扩展
      • 更加完善,功能更加强大
      • 基于XML编写
      • 支持数据类型
    • 使用XML的语法
    • 由XML编写Schema有很多好处
      • 不必学习新的语言
      • 可使用XML编辑器来编辑Schema文件
      • 可使用XML编辑器来解析Schema文件
    • Schema可保护数据通信:
    • Schema是可扩展的,因为是XML编写的,
    • 通过可扩展的Schema定义:
      • 在其他Schema中重负使用您的Schema
      • 创建由标准类型衍生而来的您自己的数据类型
      • 在相同文档中引用多重的Schema
      • Schema例子:
      • 对Schema的使用:
      • Schema文件的解释:

  7、xsl技术是做什么的?

    XSL 之于 XML 就像 CSS 之于 HTML。它是指可扩展样式表语言 (EXtensible Stylesheet Language)。这是一种用于以可读格式呈现 XML 数据的语言。

XSL 实际上包含两个部分:

  * XSLT – 用于转换 XML 文档的语言

  * XPath – 用于在 XML 文档中导航的语言

  XSLT 是指 XSL 转换 (XSL Transformation),它是 XSL 最重要的部分。

 

  8、XML解析中,请说出DOM和SAX的区别。

    

  解析xml有四种方法:DOM,SAX,DOM4j,JDOM.
  我们主要学了两种:DOM和SAX.
  DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件。各有各的好。

  DOM和SAX的不同:
    1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。从而消耗很大的内存空间。而SAX是基于事件的。当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间。
    2. DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能对XML进行读取,而不能在文件中插入数据。这也是SAX的一个缺点。
    3.SAX的另一个缺点:DOM我们可以指定要访问的元素进行随机访问,而SAX则不行。SAX是从文档开始执行遍历的。并且只能遍历一次。也就是说我们不能随机的访问XML文件,只能从头到尾的将XML文件遍历一次(当然也可以中间截断遍历)。

  9、【上机】使用JDOM解析XML文档。参考老师课堂代码

 //注:使用前需要下载JDOM的jar包(我用的是jdom-2.0.5.jar)并且把它加载在类路径里面(Properties->Java Build Path -> Add External JARs...)
  Java程序如下,详细说明见代码注释:
package com.example.xml.jdom;
import java.io.FileOutputStream;
import org.jdom2.Attribute;
import org.jdom2.Comment;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 * 使用JDOM构造一个XML文档,并输出
 * 
 */
public class JDOMTest1
{

    public static void main(String[] args) throws Exception
    {
        // 文档
        Document document = new Document();

        // 生成一个元素
        Element root = new Element("root");

        // 将生成的元素加入文档:根元素
        document.addContent(root);

        // 给结点加上注释
        Comment comment = new Comment("This is my comments");
        root.addContent(comment);

        // 加上子元素1
        Element e = new Element("hello");
        // 加属性
        e.setAttribute("sohu", "www.sohu.com");
        root.addContent(e);

        // 加子元素2
        Element e2 = new Element("world");
        Attribute attribute = new Attribute("testAttr", "attr Value");
        e2.setAttribute(attribute);// set方法会返回元素本身(方法链method chain style)
        root.addContent(e2);

        e2.addContent(new Element("subElement").setAttribute("a", "aValue")
                .setAttribute("x", "xValue").setAttribute("y", "yValue")
                .setText("textContent"));

        // 格式化
        Format format = Format.getPrettyFormat();
        // Format.getRawFormat()方法,通常用于XML数据的网络传输,因为这种格式会去掉所有不必要的空白,因此能够减少数据量

        // 可以自己设定一些format的属性
        format.setIndent("    ");// 把缩进设为四个空格(认为两个空格)

        // 输出
        XMLOutputter out = new XMLOutputter(format);
        out.output(document, new FileOutputStream("jdom.xml"));// 可在当前项目路径下找到

    }
}
 
  刷新后可以看到项目路径下生成了文档jdom.xml:
 
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <!--This is my comments-->
  <hello sohu="www.sohu.com" />
  <world testAttr="attr Value">
    <subElement a="aValue" x="xValue" y="yValue">textContent</subElement>
  </world>
</root>
 
View Code
实例2,使用JDOM解析并操纵XML文档:
 
  就读入上面创建的文档,Java代码:
 
 
package com.example.xml.jdom;

import java.io.File;
import java.io.FileWriter;
import java.util.List;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 * 读取一个XML文档
 * 
 */
public class JDOMTest2
{
    public static void main(String[] args) throws Exception
    {
        // 构造器
        SAXBuilder saxBuilder = new SAXBuilder();

        // 获取文档
        Document document = saxBuilder.build(new File("jdom.xml"));

        // 得到根元素
        Element element = document.getRootElement();
        System.out.println("Root: " + element.getName());

        // 获取子元素
        Element hello = element.getChild("hello");
        System.out.println("child: " + hello.getName());

        // 获取属性
        List<Attribute> list = hello.getAttributes();

        for (int i = 0; i < list.size(); ++i)
        {
            Attribute attr = (Attribute) list.get(i);
            String attrName = attr.getName();
            String attrValue = attr.getValue();

            System.out.println("hello的属性: " + attrName + " = " + attrValue);
        }

        // 移除一个元素
        element.removeChild("world");

        // 设定格式
        XMLOutputter out = new XMLOutputter(Format.getPrettyFormat().setIndent(
                "    "));

        out.output(document, new FileWriter("jdom2.xml"));
        // FileWriter和FileOutputStream都能用
    }

}
 
 
  另存后的jdom2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <!--This is my comments-->
    <hello sohu="www.sohu.com" />
</root>

 

    

  JDOM介绍

    JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序。

    它的设计包含Java语言的语法乃至语义。

    JDOM是一个开源项目,它基于树形结构,利用纯Java的技术对XML文档实现解析、生成、序列化及多种操作。

  

  JAXP

    JAXP(用于XML语法分析的Java API)包含了三个包:

    org.w3c.dom

      W3C推荐的用于XML标准文档对象模型的Java工具。

    org.xml.sax

      用于对XML进行语法分析的事件驱动的简单API。

    javax.xml.parsers

      工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具,JDOM能够替换org.w3c.dom软件包来有计划地操作XML文档。

  

JDOMDOMSAX的关系

  JDOM主要用来弥补DOM和SAX在实际应用当中的不足。

  主要是SAX没有文档修改随机访问及输出功能

  而DOM,Java程序员在使用时总觉得不太方便(比如DOM定义了自己的Text类而不是使用Java的String)。

  DOM的局限性:

  DOM的缺点主要是由于DOM是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为Java特别设计的。

  DOM API沿袭了XML规范,在XML中,每件东西都是一个结点,因此在DOM中找到的几乎每件东西都基于Node接口。

  就多态性来讲,它是优秀的,但鉴于如上解释,它在Java语言中的应用是困难而且不便的,其中从Node向叶类型作显式向下类型转换会导致代码的冗长和难以理解。

  JDOM是作为一种轻量级的API被制定的,最主要的是它是以Java为中心的。它在遵循DOM主要规则的基础上除去了上述缺点。

  JDOM是Java平台专用的,只要有可能,API都使用Java语言的内建String支持

  在JDOM中,XML元素就是Element的实例,XML属性就是Attribute的实例,XML文档本身就是Document的实例。

  类驱动:因为JDOM对象就是像Document、Element和Attribute这些类的直接实例,因此创建一个新的JDOM对象就如在Java语言中使用new操作符一样容易。

  它还意味着不需要进行工厂化接口配置——JDOM的使用是直截了当的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。