XML经典问答
一.HTML已经这样流行了,为什么还要发展XML?
简单地讲,HTML不能完成,我们希望XML所要完成的任务。原因很简单,XML所要完成的任务,必须由元置标语言来完成,而HTML只是一个实例置标语言。 在XML发布之前,国际互联网的发展受到HTML如下几个问题的束缚:
1) HTML无法描述数据内容,而这一点恰恰是数据检索、电子商务所必须的。
2) HTML对数据表现的描述能力是十分不够的,如HTML还不能描述矢量图形、 科学符号等对象,目前只能通过图象来表现这些对象。
3) HTML实例置标语言的地位,完全不能适应对新标记需求的发展需要。
XML的出现,使上述问题都得到很好的解决。
试想在互联网世界,如果大家都讲方言,互相交换信息时都要进行翻译,那将是一个多么难以沟通和交流的世界。在互联网世界,XML之所以重要,恰恰是由于它扮演了"国际语言"角色的缘故。此外,XML更为互联网世界提供了定义各行各业的"专业术语"的工具。
二.如何在浏览器中阅读XML?
阅读XML文档的工具一般称为XML解析器, 也称为XML处理器。 XML处理器将数据传送到应用软件, 以便处理, 出版, 查询, 或显示。XML不给应用软件提供 应用程序接口 (API), 它只是把数据传给应用软件. XML处理器不解析非构造良好的数据。 Netscape 和 Microsoft 都已经将XML解析器包含在其浏览器中。 XML开发者团体提供免费的XML阅读器和解析器, 以便在应用软件或XML制作软件中进行应用。
三.为什么要使用XML而不是HTML?
比较重要的原因有以下六条:
1)作者和供应商能使用XML设计自己的文档类型,不必被HTML所约束。
2)由于XML的超文本链接能力比HTML强得多,XML提供的信息内容比 HTML更丰富,也更易于使用。
3)XML能提供更多更好的机制方便浏览器的信息表现和优化性能。
4)XML舍弃了SGML的复杂性,因此编写处理XML的应用程序会很容易。
5)信息易于存储,可重复使用。
6)XML文件在SGML环境中也可使用,不一定要局限于在WEB中使用。
四.可以用Java创建和管理XML文件吗?
是的,任何程序设计语言都能被用来从XML形式的源文档中输出数据。已经出现了许多的前端和后台工具使得程序设计和数据管理更加方便。下面两个网址有更加详细的说明: http://www.markwatson.com/XMLdb_0_1.htm http://developerlife.com
五.为什么XML文件的分析结果出现乱码?
这是由编码问题引起的。XML标准规定,XML分析器必须支持“UTF-8”和“UTF-16”编码,而且必须能够自动区分这两种编码的文件,对于其他编码(包括常用的中文编码“GB2312”或“BIG5”)并不要求支持。如果XML文件中包含编码声明,分析器则按照声明的编码进行处理,否则就按照识别结果进行处理(识别的结果总是“UTF-8”和“UTF-16”中的一种)。因此,如果XML文件的编码在这两种之外,你必须在XML文件前加上编码声明,如:<?xml version="1.0" encoding="gb2312"?>就表示XML文件的编码是“gb2312”。
现有的XML分析器大多不支持中文编码“GB2312”或“BIG5”,因此无法读取包含中文的XML文件。你可以使用支持中文编码的分析器,如MSXML,IBMJAVA4C,IBMJAVA4J等进行XML分析。你也可以用内码转换工具,将编码转换为“UTF-8”或“UTF-16”后进行解析,然后将解析结果转换回原来的编码。本站的软件园地中的ccnv(Code Converter)就是这样的工具。当然,你也可以自己写一个内码转换程序。
关于“UTF-8”和“UTF-16”编码的详细信息,请查看本站标准荟萃中的UTF-16和UTF-8标准。
六.XML如何与数据库连接?
XML是一种文件格式,它没有规定与数据库的连接方法,你需要用传统的方法连接数据库,进行数据库查询,然后将查询结果转化为XML格式。现在有一些工具提供了XML与数据库的连接过程大都遵循这样的步骤。下面是一个利用ASP直接生成XML文件的例子,你可以访问http://www.xml.net.cn/Asps/test/roster1.asp查看执行效果。
复制代码 代码如下:
<%@ language="VBScript" %> <?xml version="1.0" encoding="gb2312"?> <?xml:stylesheet type="text/xsl" href="..image oster.xsl"?> <roster> <% set cConn = Server.CreateObject("ADODB.Connection") call cConn.Open("DSN","USER", "PWD") set rs = cConn.Execute("SELECT DISTINCT * FROM roster") Do While Not rs.EOF %> <Record> <Name><%=trim(rs("name"))%></Name> <NativePlace><%=trim(rs("NativePlace"))%></NativePlace> <Age><%=trim(rs("Age"))%></Age> <Telephone><%=trim(rs("Telephone"))%></Telephone> </Record> <% rs.MoveNext Loop rs.Close set rs=nothing set cConn=nothing %> </roster>