<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>doubleG的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=doubleG</link>
<description>doubleG的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[XSLT2.0新特性体验之一——分组的简化[原创]]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=4272</link>
<author>doubleG</author>
<pubDate>2005/3/30 17:15:51</pubDate>
<description><![CDATA[<A>　XSLT2.0已经出来时间不短了，由于时间关系一直没有好好去看，最近抽点时间和大家一起讨论一下喽:)<BR>XSLT2.0相比1.0增加了五个比较激动人心的功能<BR>今天就来看看第一个：支持分组了。在1.0中我们要对XML分组虽然可以使用很多方式，但是就算最出名的Muenchian虽然灵巧但是其复杂耗内存的方法并不受人们的推崇，在2.0中有了直接的支持，使得XML中的分组不再令人生畏，下面我们就来比较一下1.0和2.0中的分组：<BR>数据文件：node.xml<BR>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;<BR>&lt;?xml:stylesheet&nbsp;type="text/xsl"&nbsp;href="1.xsl"?&gt;<BR>&lt;root&gt;<BR>&nbsp;&lt;node&nbsp;a="a1"&nbsp;b="b1"/&gt;<BR>&nbsp;&lt;node&nbsp;a="a2"&nbsp;b="b1"/&gt;<BR>&nbsp;&lt;node&nbsp;a="a2"&nbsp;b="b2"/&gt;<BR>&nbsp;&lt;node&nbsp;a="a3"&nbsp;b="b2"/&gt;<BR>&lt;/root&gt;<BR>目标结果输出：<BR>The&nbsp;a:&nbsp;a1&nbsp;&nbsp;a2&nbsp;&nbsp;a3&nbsp;&nbsp;<BR>The&nbsp;b:&nbsp;b1&nbsp;&nbsp;b2&nbsp;&nbsp; 
<P></P>
<P><BR>在1.0中没有直接的分组功能必须自己想办法来进行处理，我就拿Muenchian方法来做例子了（毕竟是最灵巧的方法，呵呵）<BR>1.xsl(1.0版）：<BR>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;<BR>&lt;xsl:stylesheet&nbsp;version="1.0"&nbsp;xmlns:xsl="</A><A class=contentlink href='http://www.w3.org/1999/XSL/Transform"' target=_blank><FONT color=#4455aa>http://www.w3.org/1999/XSL/Transform"</FONT></A><A>&nbsp;xmlns:fo="</A><A class=contentlink href='http://www.w3.org/1999/XSL/Format">' target=_blank><FONT color=#4455aa>http://www.w3.org/1999/XSL/Format"&gt;</FONT></A><A><BR>&nbsp;&lt;xsl:key&nbsp;name="nodeA"&nbsp;match="node"&nbsp;use="@a"/&gt;<BR>&nbsp;&lt;xsl:key&nbsp;name="nodeB"&nbsp;match="node"&nbsp;use="@b"/&gt;<BR>&nbsp;&lt;xsl:template&nbsp;match="root"&gt;<BR>&nbsp;&nbsp;The&nbsp;a:<BR>&nbsp;&nbsp;&lt;xsl:for-each&nbsp;select="./node[generate-id(.)=generate-id(key('nodeA',@a))]"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="@a"/&gt;<I>&amp;#</I>160;<BR>&nbsp;&nbsp;&lt;/xsl:for-each&gt;<BR>&nbsp;&nbsp;&lt;br/&gt;<BR>&nbsp;&nbsp;The&nbsp;b:<BR>&nbsp;&nbsp;&lt;xsl:for-each&nbsp;select="./node[generate-id(.)=generate-id(key('nodeB',@b))]"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="@b"/&gt;<I>&amp;#</I>160;</P>
<P>&nbsp;&nbsp;&lt;/xsl:for-each&gt;<BR>&nbsp;&lt;/xsl:template&gt;<BR>&lt;/xsl:stylesheet&gt;</P>
<P>设定两个key值，一个名字为nodeA,一个为nodeB。他们分别都是对于node这个节点进行分组设定的，只是分组所使用的内容不同，nodeA使用的是node的a属性，nodeB使用的是b属性。<BR>generate-id(node-set):<BR>The&nbsp;generate-id&nbsp;function&nbsp;returns&nbsp;a&nbsp;string&nbsp;that&nbsp;uniquely&nbsp;identifies&nbsp;the&nbsp;node&nbsp;in&nbsp;the&nbsp;argument&nbsp;node-set&nbsp;that&nbsp;is&nbsp;first&nbsp;in&nbsp;document&nbsp;order.&nbsp;<BR>该函数会返回节点在整个文档中的唯一标识。<BR>node-set&nbsp;key(string,&nbsp;object)<BR>第一个参数是key名字，就是前面定义的&lt;xsl:key的名字，object表示那个内容和key中的内容进行匹配，key('nodeA',@a)就是返回了第一个和当前节点的匹配内容相同的文档中的节点。<BR>在上述的xsl中，我们添加进这样一段<BR>&lt;xsl:for-each&nbsp;select="./node"&gt;<BR>&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="generate-id(.)"/&gt;<I>&amp;#</I>160;<BR>&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="generate-id(key('nodeA',@a))"/&gt;<BR>&nbsp;&lt;br/&gt;<BR>&lt;/xsl:for-each&gt;<BR>可以看到输出值是<BR>IDAWHIYF&nbsp;&nbsp;IDAWHIYF<BR>IDAZHIYF&nbsp;&nbsp;IDAZHIYF<BR>IDA2HIYF&nbsp;&nbsp;IDAZHIYF<BR>IDATGIYF&nbsp;&nbsp;IDATGIYF<BR>可以看到空格前的四个数据是完全不相同的，也就是每一个节点的唯一标示，使随机生成并没有固定值，但空格后的数据第二个和第三个是相同的。我们可以看一下xml数据的第二个和第三个节点：<BR>&lt;node&nbsp;a="a2"&nbsp;b="b1"/&gt;<BR>&lt;node&nbsp;a="a2"&nbsp;b="b2"/&gt;<BR>他们的a属性是相同，所以说明key('nodeA',@a)在处理到第三个节点&lt;node&nbsp;a="a2"&nbsp;b="b2"/&gt;时返回的是符合key的第一个节点，也就是&lt;node&nbsp;a="a2"&nbsp;b="b1"/&gt;。<BR>通过这种"./node[generate-id(.)=generate-id(key('nodeA',@a))]"方式就剔除重复的内容，达到了分组效果，解析结果就是：<BR>The&nbsp;a:&nbsp;a1&nbsp;&nbsp;a2&nbsp;&nbsp;a3&nbsp;&nbsp;<BR>The&nbsp;b:&nbsp;b1&nbsp;&nbsp;b2&nbsp;&nbsp;</P>
<P>是不是很复杂啊，xslt2.0解决了这个难题，我们看一下2.0的程序：<BR>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;<BR>&lt;xsl:stylesheet&nbsp;version="2.0"&nbsp;xmlns:xsl="</A><A class=contentlink href='http://www.w3.org/1999/XSL/Transform"' target=_blank><FONT color=#4455aa>http://www.w3.org/1999/XSL/Transform"</FONT></A><A>&nbsp;xmlns:fo="</A><A class=contentlink href='http://www.w3.org/1999/XSL/Format"' target=_blank><FONT color=#4455aa>http://www.w3.org/1999/XSL/Format"</FONT></A><A>&nbsp;xmlns:xs="</A><A class=contentlink href='http://www.w3.org/2001/XMLSchema"' target=_blank><FONT color=#4455aa>http://www.w3.org/2001/XMLSchema"</FONT></A><A>&nbsp;xmlns:fn="</A><A class=contentlink href='http://www.w3.org/2005/02/xpath-functions"' target=_blank><FONT color=#4455aa>http://www.w3.org/2005/02/xpath-functions"</FONT></A><A>&nbsp;xmlns:xdt="</A><A class=contentlink href='http://www.w3.org/2005/02/xpath-datatypes">' target=_blank><FONT color=#4455aa>http://www.w3.org/2005/02/xpath-datatypes"&gt;</FONT></A><A><BR>&nbsp;&lt;xsl:output&nbsp;method="html"/&gt;<BR>&nbsp;&lt;xsl:template&nbsp;match="root"&gt;<BR>&nbsp;&nbsp;The&nbsp;a:<BR>&nbsp;&nbsp;&lt;xsl:for-each-group&nbsp;select="node"&nbsp;group-by="@a"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="@a"/&gt;&gt;<I>&amp;#</I>160;<BR>&nbsp;&nbsp;&lt;/xsl:for-each-group&gt;<BR>&nbsp;&nbsp;&lt;br/&gt;<BR>&nbsp;&nbsp;The&nbsp;b:<BR>&nbsp;&nbsp;&lt;xsl:for-each-group&nbsp;select="node"&nbsp;group-by="@b"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xsl:<I>value</I>-of&nbsp;select="@b"/&gt;&gt;<I>&amp;#</I>160;<BR>&nbsp;&nbsp;&lt;/xsl:for-each-group&gt;<BR>&nbsp;&lt;/xsl:template&gt;<BR>&lt;/xsl:stylesheet&gt;</P>
<P><BR>只是使用了一个语句：for-each-group&nbsp;通过group-by属性就将数据进行了分组，和SQL中的group-by很像对吗？它本身还有一些属性设置，往后再一一道来。</P>
<P>这篇文章的目的告诉大家，虽然xslt2.0的内容多了，但是对于一些操作确是简化了不少:)</P></A>]]></description>
</item><item>
<title><![CDATA[Eclipse+Lomboz+Tomcat]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=1549</link>
<author>doubleG</author>
<pubDate>2005/1/5 10:00:40</pubDate>
<description><![CDATA[<P>好久没有写日志了，一直是懒啊，今天是要把昨天整地咚咚记一下，省得忘了。</P>
<P>使用Lomboz开发J2EE,很简单的安装，但是安装完成后不能编辑。首先保证按照<A href="http://www.objectlearn.com/support/docs/installation/install.jsp">http://www.objectlearn.com/support/docs/installation/install.jsp</A>官方提供的安装手册安装完毕，特别注意这四步：</P>
<P><SPAN style="FONT-SIZE: 10pt; COLOR: windowtext; FONT-FAMILY: 'Times New Roman'"><IMG height=15 alt=* src="http://www.objectlearn.com/support/docs/installation/install_files/image003.gif" width=15 v:shapes="_x0000_i1027">&nbsp;&nbsp; </SPAN>Select menu ‘Window&gt;Customize Perspective...’, in the Shortcuts tab choose 'Submenus: New'</P>
<P>check all Lomboz related items.</P>
<P><SPAN style="FONT-SIZE: 10pt; COLOR: windowtext; FONT-FAMILY: 'Times New Roman'"><IMG height=15 alt=* src="http://www.objectlearn.com/support/docs/installation/install_files/image003.gif" width=15 v:shapes="_x0000_i1027">&nbsp;&nbsp; </SPAN>Select menu Window&gt;Customize Perspective...', in the Shortcuts tab choose 'Submenus: Show View'</P>
<P>check ‘Lomboz Views', J2EE View.</P>
<P><SPAN style="FONT-SIZE: 10pt; COLOR: windowtext; FONT-FAMILY: 'Times New Roman'"><IMG height=15 alt=* src="http://www.objectlearn.com/support/docs/installation/install_files/image003.gif" width=15 v:shapes="_x0000_i1028">&nbsp;&nbsp; </SPAN>Select menu Window&gt;Customize Perspective...', in the Commands tab in the availabe commands tab, check Lomboz Actions.</P>
<P><SPAN style="FONT-SIZE: 10pt; COLOR: windowtext; FONT-FAMILY: 'Times New Roman'"><IMG height=15 alt=* src="http://www.objectlearn.com/support/docs/installation/install_files/image003.gif" width=15 v:shapes="_x0000_i1028">&nbsp;&nbsp; </SPAN>Select menu Window&gt;Preferences', in the Workbench-&gt;Label Decorations, check Lomboz J2EE Decorators.</P>
<P>如果安装完后JSP Editor仍然不能使用，那么请下载solareclipse这个插件，但是它的最新的0.4.1版不支持Eclipse3.0所以需要从http://www.ehm.info/patches/net.sf.solareclipse.ui_0.4.1/ui.jar 下载ui.jar文件，然后这个ui.jar文件复制到solareclipse 插件目录,可惜该插件还没有智能提示功能。在Eclipse3.0中启动Tomcat，运行不了JSP，如果在CMD中启动的话可以，那就是说你指定了JAVA_HOME而且也指定了tools.jar，那是因为Eclipse是从JRE的Lib目录下去读取的，最简单的办法就是从JDK的bin目录下把tools.jar拷到JRE的bin目录下就OK了，运行一下吧，爽！</P>]]></description>
</item><item>
<title><![CDATA[哎，又走了一个....]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=387</link>
<author>doubleG</author>
<pubDate>2004/11/18 18:46:39</pubDate>
<description><![CDATA[还没工作到4个月，就送了两个同组的人走了，第一个不知去向，第二个要去一家美企（羡慕啊），谁让自己英语太菜了呢，加紧学习啊<IMG src="http://blogger.org.cn/blog/images/emot/face14.gif">。框架的成熟使我这个MSer不得不把目光转向JAVA，从头来起的尴尬和紧张是在有点受不了啊，呵呵 抓紧啊，时间就是生命，时间就是Money啊 哈哈]]></description>
</item><item>
<title><![CDATA[郁闷，又是.net和java的比较，不过这次是在身边....]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=239</link>
<author>doubleG</author>
<pubDate>2004/11/12 15:57:48</pubDate>
<description><![CDATA[<P>老是在网上看到.net和java的比较，这次倒好，对面的同志来个事例举证给我讲学java的好处：IBM在国内招的人要比微软多，而IBM主要用Java的，比如DB2那么大一个项目中windows平台相关的在国内部分只有三个人。汗....</P>
<P>&nbsp;&nbsp; 不过.net还不成熟的情况下，Java确实在企业级应用中有着不可撼动地位啊，放眼看去国内现在不少都是Java的。我觉得这个语言方面没有什么争的，不用顾及什么C#学Java之类的，学习才有进步啊。国内是否是跟风情况严重也不得而知，我还是喜欢一个设计良好的框架，只要你还是面向对象语言，你们自己争去吧，偶无所谓，哈哈......</P>]]></description>
</item><item>
<title><![CDATA[花了两个小时折腾一个分页]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=143</link>
<author>doubleG</author>
<pubDate>2004/11/5 11:30:35</pubDate>
<description><![CDATA[<P><A href="http://bbs.xml.org.cn/dispbbs.asp?boardID=8&amp;ID=11607">http://bbs.xml.org.cn/dispbbs.asp?boardID=8&amp;ID=11607</A></P>
<P>&nbsp; 这个东东本来移植挺简单的，但是想让它支持一下搜索后的分页正确好困难啊。JS的支持还是差一些。点击后调用transform生成的按钮竟然不能再用XSL中的{$...}赋值了，也不能用xsl的&lt;xsl:value-of select="$..."/&gt;赋值了，郁闷啊。还是差强人意啊，哈哈</P>]]></description>
</item><item>
<title><![CDATA[在.net中验证XML]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=108</link>
<author>doubleG</author>
<pubDate>2004/11/3 19:22:45</pubDate>
<description><![CDATA[<P>不少人问起怎么在程序中验证XML，这里我拿.net来做个简单例子，其实这些在MSDN中都能查到的，拿出来让大家清楚应该用什么类吧。</P>
<P>&nbsp;&nbsp; 我这里举个没有名称空间的例子（简单是关键，呵呵)。我们可以看一下这样的XSD文件（命名为key.xsd)：</P>
<P>&nbsp; &lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;xs:schema xmlns:xs="<A href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</A>" elementFormDefault="qualified" attributeFormDefault="unqualified"&gt;<BR>&nbsp;&lt;xs:element name="root"&gt;<BR>&nbsp;&nbsp;&lt;xs:annotation&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:documentation&gt;Comment describing your root element&lt;/xs:documentation&gt;<BR>&nbsp;&nbsp;&lt;/xs:annotation&gt;<BR>&nbsp;&nbsp;&lt;xs:complexType&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="Num" type="xs:integer"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="Name" type="xs:string"/&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<BR>&nbsp;&nbsp;&lt;/xs:complexType&gt;<BR>&nbsp;&lt;/xs:element&gt;<BR>&lt;/xs:schema&gt;<BR>一个root根元素，其下一个sequence，包含一个xs:integer的Num节点，一个是xs:string 的Name节点。</P>
<P>下来写一个XML:</P>
<P>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;root xmlns:xsi="<A href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</A>" xsi:noNamespaceSchemaLocation="key.xsd"&gt;<BR>&nbsp;&lt;Num&gt;1&lt;/Num&gt;<BR>&nbsp;&lt;Name&gt;sum&lt;/Name&gt;<BR>&lt;/root&gt;<BR>这个是符合上面的规范的，而且因为是没有名称空间限制，所以用了xsi:noNamespaceSchemaLocation="key.xsd"来连接XSD。</P>
<P>下面就要写程序来验证看看了，我这里用的是C#:</P>
<P>using System;<BR>using System.Xml;<BR>using System.Xml.Schema;</P>
<P>因为要验证，所以需要Schema的验证类XmlValidatingReader来完成，这个类是继承自XmlReader，是一个只向前读的游标。类似于SAX,但是这是一个基于拉模型的，而SAX是基于推模型，事件驱动的。包含了System.Xml.Schema我们才更好的应用XmlValidatingReader。</P>
<P>下来在Main函数中，我们声明一个XmlTextReader来读取XML:</P>
<P>XmlTextReader objXmlTReader = new XmlTextReader("key.xml");</P>
<P>读取本地的key.xml，就是上面的那个。再建立一个XmlValidatingReader并与objXmlTReader 建立关联，用它来验证。</P>
<P>XmlValidatingReader objXmlVReader = new XmlValidatingReader(objXmlTReader);</P>
<P>因为在验证中出错我们要及时得到错误信息，我们要向XmlValidatingReader注册一个报错函数来得到错误消息。首先我们先写一个静态函数（不是必须是静态，只是在例子中使用方便）：</P>
<P>public static void ErrConsole(object sender,ValidationEventArgs e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("The XML Validation Err:"+ e.Message );<BR>&nbsp;&nbsp;}</P>
<P>然后紧接着刚才的代码加上：</P>
<P>objXmlVReader.ValidationEventHandler +=new ValidationEventHandler(ErrConsole);</P>
<P>好，下一步就要让objXmlVReader去读取我们的XML并去验证：</P>
<P>try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(objXmlVReader.Read());<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(XmlException e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Err:"+e.Message);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;objXmlVReader.Close();<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>就在&nbsp;while(objXmlVReader.Read());中objXmlVReader会读取XML并验证，如果出错就会调用ErrConsole将错误信息打出来，很简单吧。整个程序就是这么多，你自己可以加上一些提示信息。在MSDN中寻找“验证”你会得到比着更清楚的信息。如果你要循环验证或验证次数较多，那么就用XmlSchemaCollection去保存xsd，节省来回读取硬盘的时间。这个在MSDN中也有详细介绍。</P>
<P>不过这个验证方法还是有问题的，有些Schema是不能验证的，如：</P>
<P>key.xsd:</P>
<P>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;xs:schema xmlns:xs="<A href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</A>" elementFormDefault="qualified" attributeFormDefault="unqualified"&gt;<BR>&nbsp;&lt;xs:element name="staffs"&gt;<BR>&nbsp;&nbsp;&lt;xs:complexType&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="Staff"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:complexType&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:attribute name="Id" type="xs:string"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:complexType&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="Role" type="staffType"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:keyref name="staffkey2" refer="staffKey"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:selector xpath="."/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:field xpath="Staff"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:keyref&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xs:element&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<BR>&nbsp;&nbsp;&lt;/xs:complexType&gt;<BR>&nbsp;&nbsp;&lt;xs:key name="staffKey"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:selector xpath="Staff"/&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:field xpath="@Id"/&gt;<BR>&nbsp;&nbsp;&lt;/xs:key&gt;<BR>&nbsp;&lt;/xs:element&gt;<BR>&nbsp;&lt;xs:complexType name="staffType"&gt;<BR>&nbsp;&nbsp;&lt;xs:sequence&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;xs:element name="Staff"/&gt;<BR>&nbsp;&nbsp;&lt;/xs:sequence&gt;<BR>&nbsp;&lt;/xs:complexType&gt;<BR>&lt;/xs:schema&gt;<BR></P>
<P>key.xml:</P>
<P>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;staffs xmlns:xsi="<A href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</A>" xsi:noNamespaceSchemaLocation="key.xsd"&gt;<BR>&nbsp;&lt;Staff Id="1"/&gt;<BR>&nbsp;&lt;Role&gt;<BR>&nbsp;&nbsp;&lt;Staff&gt;1&lt;/Staff&gt;<BR>&nbsp;&lt;/Role&gt;<BR>&lt;/staffs&gt;</P>
<P>你把staff的Id改得和下面的staff不同，那么XMLSPY会报错，但是objXmlVReader就没那么厉害了，它还会美滋滋的告诉你，你的文档是合格的，呵呵。<BR></P>]]></description>
</item><item>
<title><![CDATA[今天走出校门整四个月.....]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=102</link>
<author>doubleG</author>
<pubDate>2004/11/3 14:43:50</pubDate>
<description><![CDATA[回首上半年，还是个无忧无虑的学生，无论何时何地都有着一种归属感；如今，独自一人流浪在外，那种感觉是那么的遥远，就好似不能再来。学校中的自由或许在现实中已经无法寻觅，只能成为苍白生活中的一点色彩。今天走出校门整四个月.....]]></description>
</item><item>
<title><![CDATA[空格问题]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=74</link>
<author>doubleG</author>
<pubDate>2004/11/2 18:15:50</pubDate>
<description><![CDATA[<P><A href="http://bbs.xml.org.cn/dispbbs.asp?boardID=8&amp;ID=11495">http://bbs.xml.org.cn/dispbbs.asp?boardID=8&amp;ID=11495</A></P>
<P>&nbsp; 今天论坛上的一个问题，现在也没解决。当然那样的设计我不赞同，但是这个问题也没解决，先挂在这里。哪位知道也可以告诉我一声。</P>]]></description>
</item><item>
<title><![CDATA[一点想法]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=doubleG&amp;id=68</link>
<author>doubleG</author>
<pubDate>2004/11/2 8:32:30</pubDate>
<description><![CDATA[
<P>　回家转了一天，早上一清早从北京西站出来冻得一哆嗦，今天北京好冷的说。昏沉了一段时间，今天算是有些清醒了。</P>
<P>&nbsp; 三天没有上论坛了，今天看了看，觉得现在大多数的问题都是集中在一些基本的XML应用方面，可能有一部分的刚接触XML的人还没有搞清楚学习XML的方向，或者还没有掌握住学习的方法，很多时候都在一些雷同的问题上挣扎。其实很多时候只要注意看看W3C的规范标准，自己动手试一试很容易就能自己解决问题，那样应该比从别人那里得知更有成就感吧。</P>
<P>&nbsp; 当然别人的解答当然可能会更节省时间，自己的思考更有利于自己的成长。希望更多的人加入到XML的阵营中来，也希望更多人讨论更深入的XML应用话题。也希望大家能和我一起多多讨论。</P>]]></description>
</item>
</channel>
</rss>