开发问题 XML的规格说明书在哪里? ---------------------- 从http://www.w3.org/TR/REC-xml中就可以找到。 ----------------------
“DTDless”、“valid”和“well-formed”等术语的含意是什么? ---------------------- 在标准SGML文档中,所有用到的标记、元素、元素的属性都必须由文件类型定义(DTD)来说明。但是这种限制在XML的应用中并不是总是需要的,所以XML文档被设计成既可以带有DTD,也可以没有DTD文件。DTDless的意思是没有DTD的XML文件,你可以创建自己的标识和元素,但不用在DTD中正式定义。DTDless文件通过创建元素时对它们直接进行定义。但是当XML应用程序,如一个浏览器遇到DTDless文件时,因为没有DTD文件告诉浏览器关于这个文件的结构信息,所以创建DTDless文档时,仍需要一些规则来进行规范。这样“well_formed”XML文档的概念就相应产生了,它明确规定了书写XML文档的语法规范。所有符合这个规范的XML文档就被称为是“well_formed”的XML文档。如果一个“well_formed”的XML文档,包含了DTD说明,那么这个文档就被称为是一个“valid”的XML文档了。 ---------------------- 为什么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\roster.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> |