프로필Asdcer사진블로그리스트 도구 도움말

MY计数器|true|
사진(1/4)
2005-08-24

xml常见问题

 
 
A.概述性问题
   A.1 什么是XML?
   XML 全称是“可扩展标识语言“(Extensible Markup Language)。之所以称之为可扩展,是因为它不像HTML 那样只有固定的形式。它是被用来使SGML 能在万维网上能应用自如。
   XML并不是一个独立的,预定义的标识语言。它是一种元语言。它是用来描述其他语言的语言。它允许你自己设计你的标识。(HTML 是一种预定义的标识语言。HTML 只是在一类特定的文件中定义了一种描述信息的方法。而XML 能允许你在不同的文件中定义你自己设计的标识语言。)这是因为XML 是用SGML (“通用标识语言标准”国际标准的标识元语言)书写的。 
   A.2 XML的目的是什么?
   XML是被设计用来使SGML 能在万维网上能自如应用的:方便地定义文件类型,方便地制作和管理用SGML定义的文件,在网上方便地传输和共享这些文件。 
   A.3 什么是SGML?
   SGML的全称是“Standard Generalized Markup Language“(通用标识语言标准)。它是国际上定义电子文件结构和内容描述的标准。在往上有以下相关资源:
   SGML FAQ: http://www.infosys.utas.edu.au/info/sgmlfaq.txt
   SGML 主页: http://www.oasis-open.org/cover/sgml-xml.html 
   A.4 什么是HTML?
   HTML的全称是“HyperText Markup Language “(超文本标识语言)。它是SGML在网络上的一个特殊应用。
   A.5 XML,SGML,HTML是不是一回事?
   不竟然。SGML是XML和HTML的母语言。SGML的覆盖面很广。它几乎涉及人们生活的每一个领域。它被用来描述成千上万中文件。HTML只是其中一种文件类型,是一种在网上最常用的类型。它定义了一种简单而固定且含标识的文件类型。
   XML是SGML的简化版。为了实现更加方便地编写和理解应用程序,更加方便地在网络上传输信息,更加方便地实现互操作性,XML申略了一些SGML中复杂和不常用的部分。但XML还能和SGML一样通过解析。
   A.6 SGML/XML 和C/ C++?什么不同?
   C和C++和Fortran, Pascal, Basic, 或是Java一样都是编程语言。是用来制定运算和操作的。
   而SGML和XML标是说明性的语言。它们是用来表现信息的。它们使得信息能被程序正常地存储传输和处理。就它们本身而言,并不能产生什么操作。操作要由应用程序来实现。 
   A.7 是由谁负责XML?
   XML是W3C(World Wide Web Consortium 万维网络联盟)的一个项目。XML不是任何一家公司的私有财产。 
   A.8 为什么XML是一项重要的技术?
   应为它解决了两个制约网络发展的问题:
   1.基础是单一固定的文件类型。(HTML);
   2.完整的SGML过于复杂。 
   A.9 为什么不只是扩展HTML?
   不同的厂家在开发HTML时产生了许多有趣但却不兼容的发明。这已使HTML不堪重负。因为这使得你只能用一种方法表现你的信息。XML却允许许许多多的个人与组织来创造他们自己的标识语言。应用这些标识语言他们可以在自己的领域内自由地交换信息。HTML在表现信息方面是有缺陷的。当然我们必须承认它现在仍然扮演着重要的角色。但许多新的应用领域需要更加强大和灵活的工具。 
   B.SGML的使用(包括HTML的各种浏览器) 
   B.1 为什么我们要推荐XML而不主张HTML?
   1.我们可以用XML设计自己的文件类型。
   2.信息的内容将更加丰富,更加方便使用。在XML中超文本链接的能力比HTML更强。
   3. XML能使得浏览器的表现形式更加丰富。
   4.处理XML文件比.处理SGML文件来得简单。信息的开放性和重复使用的性能斗将提高。
   5.合法(Valid 参见D中Valid与-formed)的XML文件在SGML中也是合法的。
   B.2 我是不是必须由SGML或是HTML转向XML?
   不是的。现存的SGML和HTML的应用软件仍能正常处理现有的文件。 
   C. SGML 和HTML的编写
   C.1 XML是否已取代了HTML?
   没有。XML并没有取代HTML。它只是给了你一种新的选择。HTML将仍在一段时间内广泛地被使用。HTML的DTD(参见C中DTD)将既有XML版本,又有SGML版本。但XML版本更加简单。 
   C.2 XML文件是怎样的?
   它的基本结构和SGML和HTML差不多。XML文件可以非常简单。它可以不需要文件类型说明,而直接就是你自己设计的内嵌式标识。如下面一段代码:
   <?xml version="1.0" standalone="yes"?>
   <conversation>
   <greeting>Hello, world!</greeting>
   <response>Stop the planet, I want to get off!</response>
   </conversation>
   当然它也可以更加复杂些。如DTD声明,内嵌子集,等等:
   <?xml version="1.0" standalone="no" encoding="UTF-8"?>
   <!DOCTYPE titlepage SYSTEM "http://www.frisket.org/dtds/typo.dtd"
   [<!ENTITY % active.links "INCLUDE">]>
   <titlepage>
   <white-space type="vertical" amount="36"/>
   <title font="Baskerville" size="24/30" alignment="centered">Hello, world!</title>
   <white-space type="vertical" amount="12"/>
   <!-- In some copies the following decoration is hand-colored, presumably by the author -->
   <image location="http://www.foo.bar/fleuron.eps" type="URL" alignment="centered"/>
   <white-space type="vertical" amount="24"/>
   <author font="Baskerville" size="18/22" style="italic">Vitam capias</author>
   </titlepage> 
   C.3 是不是HTML有一个XML版本?
   已经有好几个HTML的XML版本,但都只是在准备阶段,并未完成。 
   C.4 既然说XML是SGML的子集,我能不能用SGML的工具直接处理XML文件?
   是的.而且非常简单。一个结构完整的XML文件和HTML文件非常相像。当然也有一些小的而且是重要的不同。在实际操作当中最大的不同就是XML文件必须摇遵守一定的法则。HTML的浏览器可以允许一些小的错误。而如果是XML就行不通了。
   C.5 什么是DTD?我能在哪儿找到?
   DTD的全称是“Document Type Definition“(文件类型定义)。具体地说,DTD是一个或是一些用XML书写的文件。它包含了对一种文件的正式定义。它定义了文件中的元素能用什么名字,能放在什么位置,应该怎样组合。在这里举一个简单的例子。比如说你想要你的文件可以描述一组<List>,其中每个<List>由可以包含若干个<Item>。那么你的DTD中应该有以下语句:<!ELEMENT List (Item)+>
   <!ELEMENT Item (#PCDATA)>
   这样一个框架定义了一个表(list),它可以包含若干个项(items)。每一个项只能包括文本的内容。当处理器处理XML文件时将自动检查DTD,以此确定文件中元素从哪而来,以及它们之间是什么关系。上面的框架允许你生成下面的一个表:
   <List><Item>Chocolate</Item><Item>Music</Item><Item>Surfing</Item></List>
   而这样一个表在屏幕上是怎样一个表象,取决于你的样式表(Stylesheet)。在HTML中你要在文件中指定应是怎样的形式。使用DTD表明你能够确定一类文章的结构和格式。
   要想找一个DTD看看吗?实际上,各个领域里的SGML DTD由成千上万。你可以参看SGML 的网页。 
   C.6 我总是听说DTD的替代者Schema,它到底是什么?
   有许多XML的开发者并不满意XML的规范。原因有两点:
   1.既然XML在说明结构信息是有很多好处,那么用来描述文件类型的结构的文件(这就是Schema)为什么不是也用XML书写的呢?这样做的好处不光是统一,而且便于用正规的文件工具编辑管理Schema。
   2.过去的DTD对数据的限制不够。比如说你想要一个元素只取负值,或是必须有一个值,DTD很难做到。 
   C.7 我能用XML作算术运算吗?
   只要你的文件类型提供算术类型,知识可以的。W3C已经有了一个MathML(Mathematical Markup Language数学标识语言)的计划。清参看W3C最新(1999年7月)发布的MathML规范。
   C.8 在XML中,我能使用Java, ActiveX吗?
   这取决于浏览器制造者运用的工具. XML是用来描述信息的; 描述性语言和用来描述内嵌函数功能的语言的目的是使得信息能在客户端被操作.. XML本身提供了一种定义标识的方法,而这些标识是描述性语言所必需的. XML是一个中立的标准.他不支持或是反对任何一种描述性语言.所以说它是一个开放的领域. 描述性语言是在”Extensible Style Language”XSL (可扩展类型语言).计划中提出的.
   C.9 我能用Java编写或是管理XML文件吗?
   可以.我们可以用任何一种编程语言从任何一种XML格式的信息中提取数据.
   D.高级开发者和应用者(包括网络管理员和服务器操作人员)
   D.1哪儿可以找到XML的规范?
   请参见: http://www.w3.org/TR/REC-xml
   D.2 "DTDless" ,"valid",和"well-formed"这些术语是什么意思?
   在完整的SGML中,我们用DTD描述特定文件中的各种标识.但DTD的生成是一件极其复杂的工作.所以XML被设计成可以缺省DTD. DTDless表示您可以创造一个标识而不需正式的定义.当然这也要付出代价.您不能在其他的文件中对同样的形式采用自动的处理. DTDless的文件是以一种非正式的方式定义它的标识的.标识是在哪儿出现的就在哪儿定义它.但当一个比方说是浏览器的XML应用程序打开了一个DTDless的文件,它必须要有办法来理解文件的结构.但它又没有DTD,所以规则上有了一些改变. 举一个例子:
   HTML中的<img> 是被定义为”EMPTY”(空)的.它并不需要”end-tag”(结尾标签). DTD 的XML应用程序在打开一个缺省DTD. 的文件,读到<img>时不知道是否需要一个”end-tag”.所以”well-formed”(结构良好)的定义也变得重要了. ”well-formed”可以使得一般元素和”EMPTY”元素区分开来.
   D.2.1 ”well-formed”(结构良好的)文件
   1.如果一个文件没有DTD,它必须在开头处有一个"Standalone Document Declaration"(独立文件声明):
   <?xml version="1.0" standalone="no" encoding="UTF-8"?>
   <foo>
   . <bar> ...<blort/>...</bar>
   </foo>
   2.除了空素以外, 标记必须前后匹配.
   3.所有的”attribute”值都要用引号括起来.
   4. ”EMPTY”元素的tag要么用”/>”结尾,要么要补成”non-EMPTY”(非空)的元素. 比如说: <BR>要么写为<BR/> 或是<BR></BR>
   5.文件中必须不能出现”markup-start “(标识开始符), 比如”<”或是“&”.
   6.元素必须遵守SGML的规则,正确嵌套.
   D.2.2”Valid “(合法的)XML
   合法的XML是指有DTD的文件.它必须是”well-formed”的.
   D.3 在DTD中,我什么时候用属性, 什么时候用元素?
   这并没有唯一的答案.着取决于您设计文件的风格.以下是两个极端的例子,它们的功能是一样的:
   1. <l n="184"><sp>Portia</sp><text>The quality of mercy is not strain’d,</text></l>
   2. <line speaker="Portia" text="The quality of mercy is not strain’d">184</line>
   D.4 SGML 和XML之间还有什么区别?
   主要的区别在于DTD的内容.为了简化语法和编写软件的过程, XML中对SGML做了很大缩减.
   D.5 现在有哪些XML的软件可以使用?
   由于更新速度太快,我们建议您参看: http://www.oasis-open.org/cover/xml.html.
   D.6 要使用XML,我是否要改变服务器的软件?
   要的,但改动不大.您只要编辑您的mime-types文件,加上以下一句:
   application/xml xml 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>

xml应用实例

本文介绍3个XML的基本应用实例,旨在带领你快速步入XML编程世界。实例包括:在.NET中使用XML、读取XML文件,插入数据到XML文档中。
   在.NET中使用XML
   如果使用过MSXML3,那么在.NET应用程序中使用XML将是一个相当简单的过程。即时没有接触过MSXML3,也不要紧,你会发现使用.NET平台提供的相关类也是很容易的一件事情。
   有两种主要API可用于访问建立在XML文档中的数据,它们包括只向前的无缓冲存取以及随机存取,而且自始至终都使用到文档对象模型DOM。有关这2个API的类位于System.XML集合中。
   如果要快速有效地访问XML文档中的数据,就需要使用XmlTextReader类。这个类采取“拉”模式处理方式,要比简单XML API(SAX)中的“推”模式处理方式优越许多。使用XmlTextReader类之前首先要引用System.Xml集合,在C#中是使用“using”关键字来引用,在Visual Basic中则是使用“imports”关键字。引用了集合后,就可以象下面的代码所示开始例示读操作了:
   XmlTextReader reader = new XmlTextReader(pathToXmlDoc);
   int elementCount = 0;
   while (reader.Read()) {
   if (reader.NodeType == XmlNodeType.Element) {
   elementCount++;
   }
   }
   XmlTextReader类中有几个不同的构造器,上面所示的负责接收一个XML文件的路径作为字符串参数。
   虽然只向前的“拉”模式处理相当有效率,但它却是只读的,所以不能允许执行插入、删除或者更新XML文档节点的操作。当需要对XML文档施加更多的控制并需要更大的灵活性时,我们可以看一看文档对象模型DOM。DOM API的功能将XML文档中的每一个节点装载到一个树形结构中,看起来就象是一个“家谱”。内存中有了这个结构,随机存取XML文档中的不同节点就变得可行。
   开始创建DOM树形结构前,首先引用System.Xml集合,然后例示XmlDocument类:
   XmlDocument xmlDoc = new XmlDocument();
   xmlDoc.Load(pathToXmlDoc);
   XmlNode root = xmlDoc.DocumentElement;
   通过使用XmlDocument类中的相关方法,在树形结构中添加节点的操作可以很容易地完成。下面的例子演示了如何从一个文件中装载XML,然后在根节点root下添加一个子元素以及它的相关属性:
   XmlDocument xmlDoc = new XmlDocument();
   XmlDoc.Load(pathToXmlDoc);
   XmlElement root = xmlDoc.DocumentElement;
   XmlElement newNode = doc.CreateElement("newNode");
   newNode.SetAttribute("id","1");
   root.AppendChild(newNode);
   以上代码执行后,将产生下面的XML文档:
   <?xml version="1.0"?>
   <root>
   <newNode id="1"/>
   </root>
   当需要将包含XML的字符串装载进DOM中时,可以使用XmlDocument类的LoadXml()方法。装载进去后,就可以按照下面的方式操作XML:
   string myXml = "<root><someNode>Hello</someNode></root>";
   XmlDocument xmlDoc = new XmlDocument();
   xmlDoc.LoadXml(myXml);
   //....manipulation or reading of the nodes can occur here
   除了以上几种,在System.Xml集合中还有多种其他类可用于执行不同的任务。上面的介绍仅仅是浅尝则止,大量的应用还需要更多的练习。
   读取XML文件
   下面介绍如何使用XmlTextReader类读取XML文档,并将数据显示输出。
   System.XML名称空间中定义了两个类-XmlReader与XmlTextReader,其中XmlTextReader类来源于XmlReader类,而XmlTextReader类就可以用于读取XML文档,这个文档的Read函数将读取文档内容,直到节点尾部。
   以下是具体的实现步骤:
   1、引用名称空间
   因为相关XML的类是在System.XML名称空间中定义的,所以第一件事情就是引用这个名称空间:
   using System.Xml;
   2、打开XML文档
   XmlTextReader类的构造器可用于打开一个XML文件。本例程的XML文件叫做xmltest.xml,位于C:\temp目录下。打开文件c:\temp\xmltest.xml的命令如下:
   XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml");
   3、读取数据
   读取XML文件的数据,可以使用XmlTextReader类的Read方法:
   while ( reader.Read() )
   {
   Console.WriteLine(reader.Name);
   }
   4、完整执行代码readxml.cs
   namespace WriteToXML
   {
   using System;
   using System.Xml;
   /// <summary>
   /// Summary description for Class1.
   /// </summary>
   public class Class1
   {
   public Class1()
   {
   }
   public static int Main(string[] args)
   {
   try
   {
   XmlTextWriter writer = new XmlTextWriter("C:\\temp\\xmltest.xml", null);
   writer.WriteStartDocument();
   writer.WriteComment("Commentss: XmlWriter Test Program");
   writer.WriteProcessingInstruction("Instruction","Person Record");
   writer.WriteStartElement("p", "person", "urn:person");
   writer.WriteStartElement("LastName","");
   writer.WriteString("Chand");
   writer.WriteEndElement();
   writer.WriteStartElement("FirstName","");
   writer.WriteString("Chand");
   writer.WriteEndElement();
   writer.WriteElementInt16("age","", 25);
   writer.WriteEndDocument();
   }
   catch (Exception e)
   {
   Console.WriteLine ("Exception: {0}", e.ToString());
   }
   return 0;
   }
   }
   }
   插入数据到XML文档中
   要实现将XML数据插入到一个现存文档或者一个新文档中的目的,可以使用XmlNode类和XmlDocument类。具体的实现步骤如下:
   1、引用名称空间
   因为相关XML的类是在System.XML名称空间中定义的,所以第一件事情就是引用这个名称空间:
   using System.Xml;
   2、装载XML到文档中
   我们可以使用XmlDocument的LoadXml方法将XML数据装载到一个文档中,或者是装载一个现存的XML文档。下面的代码装载XML数据到文档中:
   XmlDocument doc = new XmlDocument();
   doc.LoadXml("<XMLFile>" +
   " <SomeData>Old Data</SomeData>" +
   "</XMLFile>");
   3、插入XML数据
   下面的代码将XML数据插入到文件中,然后保存为InsertedDoc.xml:
   try
   {
   XmlNode currNode;
   XmlDocument doc = new XmlDocument();
   doc.LoadXml("<XMLFile>" +
   " <SomeData>Old Data</SomeData>" +
   "</XMLFile>");
   XmlDocumentFragment docFrag = doc.CreateDocumentFragment();
   docFrag.InnerXml="<Inserted>" +
   " <NewData>Inserted Data</NewData>" +
   "</Inserted>";
   // insert the availability node into the document
   currNode = doc.DocumentElement.FirstChild;
   currNode.InsertAfter(docFrag, currNode.LastChild);
   //save the output to a file
   doc.Save("InsertedDoc.xml");
   }
   catch (Exception e)
   {
   Console.WriteLine ("Exception: {0}", e.ToString());
   }
   代码执行后,新文档的内容如下:
   - <XMLFile>
   - <SomeData>
   Old Data
   - <Inserted>
   <NewData>Inserted Data</NewData>
   </Inserted>
   </SomeData>
   </XMLFile>(完)

xml的应用是什么?xml到底能做什么?

  首先说,xml的技术有两项的很显著的特点。
1,数据和现实的分离。
2,数据的自描述性。
下面我就从这两个方面,结合自己的经验和丛书中了解的知识,简单的谈一下。
第一:数据和现实的分离。
比如说你手头上有一篇的资料(我们这里先假定是文字的资料,因为如果涉及到图,影像等范围就太广了,也不是我只能力所及),是xml的数据的格式,好了,如果你的客户想通过互联网看看你的资料。你就可以使用一个aaa.xsl把你的xml的数据格式化为HTML的格式,同时这里面有个补充一点,因为你可以控制你要显示的内容,你可以过滤掉对于客户不能看到的信息。但是这里面你并没有动原来的数据。
如果你的老板想把资料打印出来,作为报表向上级汇报,还是用原来的数据,再写一个bbb.xsl,把xml的数据输出为一个漂亮的报表的形式。ok了。
如果你以前的数据是txt的格式,你就必须从新的要做两种的格式,
一个html的,一个报表的。你的工作最多时copy,copy的
2,数据的自描述性。
比如说我的个人信息。
对于数据库来说,可能建立一个users的表。建立不同的字段。
数据取得可以是
rs("name")="jiangtianpeng"
rs("Emial")="wfxian@263.net"
rs("Id")="dadapeng"
但是没有了rs或者对于外部来说又如何的区分id和name的区别。
dadapeng是id?还是name?
jiangtianpeng是name?还是id?

ok
用xml描述一下个人信息
<person>
<name>jiangtianpeng</name>
<id>dadapeng</id>
<natio>china</nation>
....
<email>wfxian@263.net</email>
</person>

是不是一目了然。
实际上面的问题就涉及到了不同系统之间的xml的交换。xml是不同系统之间的桥梁。

我谈一下我工作的xml经验
我现在的工作是一个中文,英文,俄文三种语言的网站,
比如我们通过com组件的得到一个用户的信息
可能是
<user id='feiddd' name_CN="王" name_EN="ddddf"
name_RU='这里是俄文' 。。。。等等的信息 />

在中文上就写一个显示中文的xsl,
在英文上就写一个显示英文信息的xsl。

如果不用这种技术,将会很麻烦的。

 

➸ 回顶

2005-08-23

留言板

 
大家试试我的新留言板,在第一行输入你的名字,然后在第二行输入你的留言,再点击“send”发送即可。如果写错了,那么你有一分钟的时间删除你的留言,只需点击你的留言下的“delete”即可。想查看以前的留言,请点击“Archive”。另外发现解决中文乱码的方法,即每输入两个字,按一下空格键,然后再输入就可以了,试试看吧!
您 是 第
web hit counter
位 访 客
 
源码如下:
<DIV>
<DIV style="LINE-HEIGHT: 14pt; LETTER-SPACING: 0.2em">
<DIV>大家试试我的新留言板,在<FONT color=#ff6600>第一行</FONT>输入你的名字,然后在<FONT color=#ff6600>第二行</FONT>输入你的留言,再点击“<FONT color=#ff6600>send</FONT>”发送即可。如果写错了,那么你有一分钟的时间删除你的留言,只需点击你的留言下的“<FONT color=#ff6600>delete</FONT>”即可。想查看以前的留言,请点击“<FONT color=#ff6600>Archive</FONT>”。另外发现解决中文乱码的方法,即每输入两个字,按一下空格键,然后再输入就可以了,试试看吧!</DIV>
<DIV align=center><IFRAME style="WIDTH: 346px; HEIGHT: 321px" src="http://313666.myshoutbox.com/" width=345 height=321></IFRAME></DIV></DIV>
<DIV>
<DIV style="TABLE-LAYOUT: auto; DISPLAY: block; LEFT: 590px; LINE-HEIGHT: 14pt; LETTER-SPACING: 0.2em; TOP: 126px; BORDER-COLLAPSE: separate" align=right><FONT color=#ff9900>您 是 第 </FONT></DIV>
<DIV style="TABLE-LAYOUT: auto; DISPLAY: block; LEFT: 640px; LINE-HEIGHT: 14pt; LETTER-SPACING: 0.2em; TOP: 126px; BORDER-COLLAPSE: separate" align=right><FONT color=#ff9900><A href="http://www.statcounter.com/" target=_blank><IMG height=17 alt="web hit counter" src="http://c2.statcounter.com/counter.php?sc_project=549622&amp;java=0" width=77 align=center border=0></A></DIV>
<DIV style="TABLE-LAYOUT: auto; DISPLAY: block; LEFT: 720px; LINE-HEIGHT: 14pt; LETTER-SPACING: 0.2em; TOP: 126px; BORDER-COLLAPSE: separate" align=right><FONT color=#ff9900>位 访 客</FONT></DIV></FONT></DIV></DIV>
 
 
wattblue.css:
 
/* theme (C) SL
 * wattblue.css
 *
 */

a:link{
 color : #000000;
 text-decoration : underline;
}
a:visited{
 color : #000000;
 text-decoration : underline;
}
a:hover{
 color : #000000;
 text-decoration : underline;
}
a:active{
 color : #C4E1FF;
 text-decoration : underline;
}
body{
 background-color : #FFFFFF;
 font-family : Verdana, Arial, Helvetica, sans-serif;
 font-size : xx-small;
 scrollbar-base-color : #F2F9FF;
 scrollbar-arrow-color : #000000;
 scrollbar-track-color : #FFFFFF;
}
.SB_alert {
 color : #FF0000;
 font-family : Verdana, Arial, Helvetica, sans-serif;
 font-size : xx-small;
 font-weight : bold;
}
.SB_button {
 background : #F2F9FF;
 border : 1 solid #000000;
 color : #000000;
 font-family : Verdana, Arial, Helvetica, sans-serif;
 font-size : 9px;
 font-weight : bold;
}
.SB_input {
 background : #FFFFFF;
 border : 1 solid #000000;
 color : #000000;
 font-family : Verdana, Arial, Helvetica, sans-serif;
 font-size : 10px;
}
.SB_formarea {
 background-color : #FFFFFF;
 border-bottom-color : #C4E1FF;
 border-bottom-style : solid;
 border-bottom-width : 1;
 border-left-color : #C4E1FF;
 border-left-style : solid;
 border-left-width : 1px;
 border-right-color : #C4E1FF;
 border-right-style : solid;
 border-right-width : 1px;
 border-top-color : #FFFFFF;
 border-top-style : solid;
 border-top-width : 1px;
 color : #000000;
 font-size : 10px;
}
.SB_shoutbox {
 color : #000000;
 font-family : Verdana, Arial, Helvetica, sans-serif;
 font-size : xx-small;
 text-align : left;
}
.SB_table0 {
 background-color : #F2F9FF;
 border-bottom-color : #FF0000;
 border-bottom-style : solid;
 border-bottom-width : 0;
 border-left-color : #C4E1FF;
 border-left-style : solid;
 border-left-width : 1px;
 border-right-color : #C4E1FF;
 border-right-style : solid;
 border-right-width : 1px;
 border-top-color : #FF0000;
 border-top-style : solid;
 border-top-width : 0px;
 color : #000000;
 font-size : xx-small;
}
.SB_table1 {
 background-color : #FFFFFF;
 border-bottom-color : #C4E1FF;
 border-bottom-style : solid;
 border-bottom-width : 1;
 border-left-color : #C4E1FF;
 border-left-style : solid;
 border-left-width : 1px;
 border-right-color : #C4E1FF;
 border-right-style : solid;
 border-right-width : 1px;
 border-top-color : #C4E1FF;
 border-top-style : solid;
 border-top-width : 1px;
 color : #000000;
 font-size : xx-small;
}
blink;
 
 
2005-08-22

正则表达式中的特殊字符

字符/
意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。
例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示
匹配一个单词的分界线。
或者:
对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。
例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’。

字符^
意义:表示匹配的字符必须在最前边。
例如:/^A/不匹配"an A,"中的’A’,但匹配"An A."中最前面的’A’。

字符$
意义:与^类似,匹配最末的字符。
例如:/t$/不匹配"eater"中的’t’,但匹配"eat"中的’t’。

字符*
意义:匹配*前面的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的’boooo’或"A bird warbled"中的’b’,但不匹配"Agoat g
runted"中的任何字符。

字符+
意义:匹配+号前面的字符1次或n次。等价于{1,}。
例如:/a+/匹配"candy"中的’a’和"caaaaaaandy."中的所有’a’。

字符?
意义:匹配?前面的字符0次或1次。
例如:/e?le?/匹配"angel"中的’el’和"angle."中的’le’。

字符.
意义:(小数点)匹配除换行符外的所有单个的字符。
例如:/.n/匹配"nay, an apple is on the tree"中的’an’和’on’,但不匹配’nay’。


字符(x)
意义:匹配’x’并记录匹配的值。
例如:/(foo)/匹配和记录"foo bar."中的’foo’。匹配子串能被结果数组中的素[1], ...,[n] 返
回,或被RegExp对象的属性, ..., 返回。

字符x│y
意义:匹配’x’或者’y’。
例如:/green│red/匹配"green apple"中的’green’和"red apple."中的’red’。

字符{ n }
意义:这里的n是一个正整数。匹配前面的n个字符。
例如:/a{ 2 }/不匹配"candy,"中的’a’,但匹配"caandy," 中的所有’a’和"caaandy."中前面的两个’a’。

字符{ n, }
意义:这里的n是一个正整数。匹配至少n个前面的字符。
例如:/a{ 2, }不匹配"candy"中的’a’,但匹配"caandy"中的所有’a’和"caaaaaaandy."中的所有’a’

字符{ n,m }
意义:这里的n和m都是正整数。匹配至少n个最多m个前面的字符。
例如:/a{ 1,3 }/不匹配"cndy"中的任何字符,但匹配 "candy,"中的’a’,"caandy," 中的前面两个
’a’和"caaaaaaandy"中前面的三个’a’,注意:即使"caaaaaaandy" 中有很多个’a’,但只匹配前面的三 个’a’即"aaa"。

字符[xyz]
意义:一字符列表,匹配列出中的任一字符。你可以通过连字符-指出一个字符范围。
例如:[abcd]跟[a-c]一样。它们匹配"brisket"中的’b’和"ache"中的’c’。

字符[^xyz]
意义:一字符补集,也就是说,它匹配除了列出的字符外的所有东西。 你可以使用连字符-指出一 字符范围。
例如:[^abc]和[^a-c]等价,它们最早匹配"brisket"中的’r’和"chop."中的’h’。

字符
意义:匹配一个空格(不要与b混淆)

字符b
意义:匹配一个单词的分界线,比如一个空格(不要与混淆)
例如:/bnw/匹配"noonday"中的’no’,/wyb/匹配"possibly yesterday."中的’ly’。

字符B
意义:匹配一个单词的非分界线
例如:/wBn/匹配"noonday"中的’on’,/yBw/匹配"possibly yesterday."中的’ye’。

字符cX
意义:这里的X是一个控制字符。匹配一个字符串的控制字符。
例如:/cM/匹配一个字符串中的control-M。

字符d
意义:匹配一个数字,等价于[0-9]。
例如:/d/或/[0-9]/匹配"B2 is the suite number."中的’2’。

字符D
意义:匹配任何的非数字,等价于[^0-9]。
例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的’B’。

字符f
意义:匹配一个表单符

字符n
意义:匹配一个换行符

字符r
意义:匹配一个回车符

字符s
意义:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]。
例如:/sw*/匹配"foo bar."中的’ bar’。

字符S
意义:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]。
例如:/S/w*匹配"foo bar."中的’foo’。

字符t
意义:匹配一个制表符

字符v
意义:匹配一个顶头制表符

字符w
意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]。
例如:/w/匹配"apple,"中的’a’,".28,"中的’5’和"3D."中的’3’。

字符W
意义:匹配除数字、字母外及下划线外的其它字符,等价于[^A-Za-z0-9_]。
例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的’%’。

字符n
意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。

例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的’apple, orange’,下面有一个更加完整的例子。
注意:如果左圆括号中的数字比n指定的数字还小,则n取下一行的八进制escape作为描述。

字符ooctal和xhex
意义:这里的ooctal是一个八进制的escape值,而xhex是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码
 
 
 
附:下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符 描述 
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 (pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 {CONTENT}… 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。 (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 [xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 [^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 [a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 \B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \d 匹配一个数字字符。等价于 [0-9]。 \D 匹配一个非数字字符。等价于 [^0-9]。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 \W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。. \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)' 匹配两个连续的相同字符。 \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 \un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (?)。

 

➸ 回顶

2005-08-19

[转载]MSN SPACES 推出新的功能模块!

原文链接:云清雾淡™
 
昨天浏览高手的空间,发现MSN SPACES 在8月添加了3个新的功能模块,这些功能都是极其实用的且大家都翘盼已久的功能哦.
 
1:Windows media player 播放模块:
   有了这个模块,再不用为背景音乐置顶发愁了,支持wma,wav,mp3格式的音乐,wmv,avi,mpg,mpeg格式的视频。
 
2:可编辑的html模块:
   模块内可以加入512字节以内的代码,而且代码的限制跟日志的限制是一样的.大家可以在此放入计数器等.计数器置顶的问题也迎刃而解.当然也可以放入置顶音乐,只是没有现在的Windows media player 播放模块方便且有控制条.总之这个模块是很有潜力的,只是可放入的代码长度太短.
 
3:自定义页面外观Tweak UI模块 :
   这个功能太棒了,可以自定义首页页面的外观,包括背景色,背景图片等.这样大家可以让自己的BLOG变得更有个性.每个主题都有各自的优缺点,这下好了,你可以DIY自己的主题了!!即使用同一个主题,也有不同的风格!但要注意的是,起作用的仅仅是首页的外观风格,当你单独的进入一篇日志时,仍然是你所选主题的默认风格.
 

 
不过你如果要使用到上述功能,你会发现进入编辑状态后,在模块组里根本找不到这些功能模块.确实挺郁闷的,既然要给人用,还要遮遮掩掩的,呵呵,开玩笑,可能是出于什么考虑吧.
 
如何添加呢(一次添加后,这些模块只要不再删除,就不会消失,如果删除了还需要再执行一次这样的添加)
 
进入页面右侧顶部的"编辑您的共享空间",在浏览器地址栏的末尾接着打入相应的地址,注意是紧随原来的地址打入,然后回车浏览,进入"自定义"---"模块",你就会发现已经出现了相应的模块,你只需添加即可.
 
浏览器地址栏的末尾接着打入相应的地址分别为:
 
   Windows media player 播放模块:   &powertoy=musicvideo 
 
   可编辑的html模块:   &powertoy=sandbox
 
   自定义页面外观Tweak UI :   &powertoy=tweakomatic
 
 More:如何使用?
    这些模块的界面都是英文的,更具体的请到到小绿人Rainwalk的空间看看,有很详细的使用介绍.
 
2005-08-18

▁▂▃ 联系我 ▃▂▁





 : Mail to ME     :Asdcer@gmail.com    : 513737277