• XML技术


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


    XML提供了一种比较简单的描述内容的方法,而且这种方法能表述列表、树等常见的数据结构,可扩展性好。XML使用纯文本方法书写,人们可以读懂内容,也可以自行修改里面的内容。XML是树形的结构,关于树,有非常非常多很成熟的算法进行描述、操作、生成、分析,使得XML描述的数据可以很方便的生成和处理。


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


    同上题。


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


    格式良好的XML文档需要满足:
    (1)必须有XML文档的声明语句;
    (2)必须有且仅有一个根元素;
    (3)标签成对出现;
    (4)标签名称大小写敏感;
    (5)属性值用双引号;
    (6)元素正确嵌套。


    4.下面的XML代码有什么问题,请指出:


    (1)没有xml文档声明,如:<?xml version="1.0" encoding="gbk" ?>
    (2)没有根元素;
    (3)属性值没有双引号,<prename endAge=20>朱重八</prename>;
    (4)标签名称大小写敏感, <name startAge="20">朱元璋</Name>,起始标签和结束标签大小写一致;

    <resume>
    <prename endAge=20>朱重八</prename>
    <name startAge="20">朱元璋</Name>
    <dynasty>明朝</dynasty>
    <gender>男</gender>
    <preJob>要饭</preJob>
    <preJob>和尚</preJob>
    <job>皇帝</job>
    </resume>
    <wife>
    <name>马大脚</name>
    </wife>

    5.【上机】完成课堂代码:


    <?xml version="1.0" encoding="gbk" ?><!--声明不是必须的。-->
    <resume>
    <prename endAge="20">朱重八</prename>
    <name startAge="20">朱元璋</name>
    <dynasty>明朝</dynasty>
    <gender>男</gender>
    <preJob>要饭</preJob>
    <preJob>和尚</preJob>
    <job>皇帝</job>
    </resume>

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


    “我叫高小七,今年18了,我喜欢如花姑娘,也喜欢我的宠物旺财”
    <?xml version="1.0" encoding="gbk" ?>
    <personalinfo>
    <name >高小七</name>
    <age>18</age>
    <hobbies>如花姑娘</hobbies>
    <hobbies>
    <pet>旺财</pet>
    </hobbies>
    </ personalinfo>

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


    (1)CDATA的作用:XML文档中的所有文本均会被解析器解析,只有CDATA区段中的文本会被解析器忽略。
    (2)实例:

    xml解析器通常会解析xml文档中的所有文本。
    当某个xml元素被解析时,其标签之间的文本也会被解析,如:
    <message>This text is also parsed</message>
    解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中,其中的 <name> 元素包含着另外的两个元素(first 和 last):
    <name><first>Bill</first><last>Gates</last></name>
    而解析器会把它分解为像这样的子元素:
    <name>
    <first>Bill</first>
    <last>Gates</last>
    < /name>
    但是,在实际应用中有这样一种情形:“name”标签之间的内容不需要被解析成子元素,而是整体作为“name”标签的内容,也就是“name”标签的字符数据,这个时候,就需要加CDATA标记,如下:
    <name>
    <![CDATA[
    <first>Bill</first>
    <last>Gates</last>
    ]]>
    < /name>
    这样”name”之间的内容就不会被解析了(虽然它包含<,>等标签语法),而是全部当作字符(文本)数据来处理。CDATA表示“字符数据”(CharacterData)。

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


    在xml技术里,我们可以编写一个文档来约束某一个xml文档的书写规范,如一个xml文档要包含哪些元素,元素与元素之间的嵌套关系,某些元素必须具备哪些属性等,这称为xml约束。

    常用的xml约束技术有两种:dtd和schema。
    dtd:document type definition, 文档类型定义。近几年来XML技术领域所使用的最广泛的一种模式。但是它有其局限性:不能完全满足XML自动化处理的要求,例如不能很好实现应用程序不同模块间的相互协调,缺乏对文档结构、属性、数据类型等约束的足够描述等等。所以W3C于2001年5月正式推荐XML Schema为XML 的标准模式。显然,W3C希望以XML Schema来作为XML模式描述语言的主流,并逐渐代替XML DTD。XML Schema与XML DTD相比到底有哪些优势呢?

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

    Schema的新特性
    Schema基于XML语法
    Schema可以用能处理XML文档的工具处理
    Schema大大扩充了数据类型,可以自定义数据类型
    Schema支持元素的继承
    Schema支持属性组
    Schema支持命名空间(命名冲突)

    9.xsl技术是做什么的?


    XSL(eXtensible Stylesheet Language)是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言。


    10.XML解析中,请说出DOM和SAX的区别。


    DOM:
    基于XML树结构
    比较耗资源
    适用于多次访问XML

    SAX:
    基于事件
    消耗资源小
    适用于数据量较大的XML

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


    JDOM是一种解析XML的Java工具包。
    JDOM和DOM的区别:
    DOM适合于当今流行的各种语言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了为HTML和XML文档提供了一个可应用于不同平台的编程接口。W3C DOM的最新信息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。

    DOM的设计为了适用于不同的语言,它保留了不同语言中非常相似的API。但是它并不适合于Java编程者的习惯。而JDOM作为一种轻量级API被制定,它最核心的要求是以Java为中心,只适合于Java语言,它遵循DOM的接口主要规则,除去了DOM中为了兼容各语言而与Java习惯的不同。

    代码示例:
    要处理的XML文档:
    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    <book>
    <title>牧羊少年</title>
    <price>9.6</price>
    </book>
    <book>
    <title>钢铁是怎样炼成的</title>
    <price>9.6</price>
    </book>
    <book>
    <title>三国演义</title>
    <price>38.9</price>
    </book>
    </books>
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    public class JDOMParse {
    public static void main(String[] args) throws JDOMException, IOException {
    //使用JDOM首先要指定使用什么解析器;
    SAXBuilder sb=new SAXBuilder();
    File file=new File("e:\books.xml");
    //得到Document,我们以后要进行的所有操作都是对这个Document操作的:这个//Document类是org.jdom2.Document;
    Document document=sb.build(file);
    //得到根元素;在JDOM中所有的节点都是一个org.jdom.Element类,当然他的子节点
    //也是一个org.jdom.Element类;
    Element root=document.getRootElement();
    //得到元素(节点)的集合;这表示得到“books”元素的所在名称为“book”的元素,
    //并把这些元素都放到一个List集合中;
    List bookList=root.getChildren("book");
    //遍历List集合;
    for(int i=0;i<bookList.size();i++){
    Element book=(Element)bookList.get(i);
    //取得元素的子元素的值:
    String title=book.getChildText("title");
    String price=book.getChildText("price");
    System.out.println("第"+(i+1)+"本书:"+title+""+price);
    }
    }
    }


    12.【上机】使用XPATH读取XML文档,测试各种XPATH。

    XPath(XML Path Language)即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

    代码示例:
    要处理的XML文档:
    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    <book>
    <title>牧羊少年</title>
    <price>9.6</price>
    </book>
    <book>
    <title>钢铁是怎样炼成的</title>
    <price>9.6</price>
    </book>
    <book>
    <title>三国演义</title>
    <price>38.9</price>
    </book>
    </books>
    public class XPathTest {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException, XPathExpressionException {
    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    Document document=db.parse("e:\books.xml");
    // 创建XPath对象;
    XPath xPath=XPathFactory.newInstance().newXPath();
    //获取根结点;
    Node root=(Node)xPath.evaluate("//*", document,XPathConstants.NODE);
    System.out.println(root);
    System.out.println(root.getNodeName());
    //获取子元素并打印;
    NodeList nodeList=(NodeList)xPath.evaluate("/books/*", document, XPathConstants.NODESET);
    for(int i=0;i<nodeList.getLength();i++){
    System.out.println(nodeList.item(i).getNodeName());
    }

    //只获取元素名称为"title"的元素;
    NodeList nodeList1=(NodeList)xPath.evaluate("//*[name()='title']", document, XPathConstants.NODESET);
    for(int i=0;i<nodeList1.getLength();i++){
    System.out.println(nodeList1.item(i).getNodeName()+""+nodeList1.item(i).getTextContent());
    }
    //获取含有子元素的元素;
    NodeList nodeList2 = (NodeList) xPath.evaluate("//*[*]", document,XPathConstants.NODESET);
    for (int i = 0; i < nodeList2.getLength(); i++) {
    System.out.println(nodeList2.item(i).getNodeName());
    }
    //获取指定层级的元素;
    NodeList nodeList3 = (NodeList) xPath.evaluate("/*/*/*", document,XPathConstants.NODESET);
    for (int i = 0; i < nodeList3.getLength(); i++) {
    System.out.println(nodeList3.item(i).getNodeName());
    }
    }


    XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的东西。
    注:以上代码只是简单实例,详细学习请参照API。

    13.【上机】jQuery中,如何解析xml文档。建立项目,测试之。

  • 相关阅读:
    Python实现DES加密算法
    空循环,g++ O2优化
    java 高并发下超购问题解决
    原型模式
    Lambda速学
    观察者模式
    略读策略模式
    .net 字典的速学
    执行计划准备篇
    关于“策略模式”与“桥接模式”的问题
  • 原文地址:https://www.cnblogs.com/ren549047861/p/11294290.html
Copyright © 2020-2023  润新知