做了一小段xml.与大家交流。 三个文件。(blue.xml blue.xsl blue.css )拷到本地同一目录下。
blue.xml:
<?xml version='1.0' encoding='GB2312'?> <?xml:stylesheet type='text/xsl' href='blue.xsl'?> <Topic> <Issue> <TopicId>000001</TopicId> <UserName>ycoe12</UserName> <RankName>超级用户</RankName> <TopicName>[JSP]Servlet中线程的问题</TopicName> <DateTime>2005-12-26 01:03:44</DateTime> <ReplyNum>2</ReplyNum> <ReadNum>68</ReadNum> <Content>请问一下怎样实现在Servlet里使用线程。比如用两线程,让一个线程与另一个线程通讯。 我的方法: implements Runnable 。生成后马上让它sleep。但是我不知道怎样让另一个线程在完成后通知此线程??(两个请求之间通讯) 我想在是通过检测HttpSession来判断另一个线程的进程的。但这样好像不太好。。。 谢谢</Content> </Issue> <Replys> <Reply> <TopicID>000001</TopicID> <UserName>红色黑客</UserName> <RankName>经典杀手</RankName> <ReplyID>0001</ReplyID> <Content>这个应该用线程同步吧??</Content> <DateTime>2005-12-26 13:22:15</DateTime> </Reply> <Reply> <TopicId>000001</TopicId> <UserName>ycoe12</UserName> <RankName>超级用户</RankName> <ReplyID>0002</ReplyID> <Content>不是,简单地说就是用一个线程完成后去通知另一个线程。。。不是,简单地说就是用一个线程完成后去通知另一个线程。。。不是,简单地说就是用一个线程完成后去通知另一个线程。。。</Content> <DateTime>2005-12-26 20:41:51</DateTime> </Reply> </Replys> </Topic>
blue.xsl:
<?xml version="1.0" encoding="GB2312"?> <!-- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="gb2312" version="4.0"/> --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="text()" > <xsl:value-of/> </xsl:template> <xsl:template match="/"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"/> <title><xsl:value-of select="Topic/Issue/TopicName"/></title> <link REL='Stylesheet' HREF='blue.css' TYPE='text/css'/> </head> <body> <div id="divFrame"> <div id="divTitle"> <span id="spanTitleLeft"><xsl:value-of select="Topic/Issue/TopicName"/></span> <span id="spanTitleRight">作者:<xsl:value-of select="Topic/Issue/UserName"/> | <xsl:value-of select="Topic/Issue/RankName"/>| 发表时间:<xsl:value-of select="Topic/Issue/DateTime"/></span> </div> <div id="divMain"> <xsl:apply-templates select="Topic/Issue/Content" /> </div> <div id="divReply"> <xsl:apply-templates select="Topic/Replys"/> </div> </div> </body> </html> </xsl:template> <xsl:template match="Replys" > <xsl:for-each select="Reply" > <div> <div id="replyPerson">回复人:<xsl:value-of select="UserName"/> | <xsl:value-of select="RankName"/>|</div> <div><xsl:apply-templates select="Content" /></div> <div>发表时间:<xsl:value-of select="DateTime"/></div> </div> </xsl:for-each> </xsl:template> <xsl:template match="Content"> <xsl:apply-templates /> </xsl:template> </xsl:stylesheet>
blue.css:
body { text-align:center; background-color:#ffffff; } div { font-family:Verdana; text-align:left; } #divFrame { background-color:#CCCCCC; width:95%; padding:8px; } #divTitle { background-color:#F7F3F7; border:1px solid black; width:100%; font-size:16px; font-weight:bold; line-height:30px; color:#0051A5; padding-left:10px; } #divMain { font-size:14px; margin-top:5px; border:1px solid black; padding:10px; background-color:white; } #divReply { background-color:#ffffff; margin-top:5px; margin-bottom:5px; border:1px solid black; width:100%; font-size:9pt; padding:10px; letter-spacing:2px; line-height:24px; } #spanTitleLeft { float:left; } #spanTitleRight { font-weight:normal; font-size:12px; float:right; padding-right:10px; } #replyPerson{ border-bottom:1px solid #0066cc; background-color:#f1f5fa; }
(以前见别人做过一个类似的电子文档。)XML在更多的时候只是一种数据文件,利用XML我们可以使内容与样式分离,如果我们将XML文件比作结构化的原料的话。那么XSL就好像"筛子"与"模子",筛子选取自己需要的原料,这些原料再通过模子形成最终的产品。这个模子大致是这样:我们先设计好表现的页面,再将其中需要从XML中获取数据来填充内容的部分去掉,然后用XSL语句从XML中筛出相关的数据来填充。
XML在展开时是一个树形结构,将树形结构中自定义标记称为节点,节点之间存在父子、兄弟关系,要访问其中的结点从根结点就要以"/"来层层进入。
怎样从XML里提取相关的数据,就要用到XSL提供的模式化查询语言。就是通过相关的模式匹配规则表达式从XML里提取数据的特定语句,即上面所说的"筛子"。
选择模式: <xsl:for-each>、<xsl:value-of>和 <xsl:apply-templates>
匹配模式: <xsl:template>
<xsl:template match="Replys" > <xsl:for-each select="Reply" > <div> <div id="replyPerson">回复人:<xsl:value-of select="UserName"/> | <xsl:value-of select="RankName"/>|</div> <div><xsl:apply-templates select="Content" /></div> <div>发表时间:<xsl:value-of select="DateTime"/></div> </div> </xsl:for-each> </xsl:template>
简单说下这段:
XSL模板将XSL的设计细化成一个个模板(块),最后再将这些模板(块)组合成一个完整的XSL;好比船与集装箱,我们不是将所有的货物一件件地堆起来,而是装在各自的集装箱中,然后再在船上将这些集装箱堆放起来。这种方法可以使你先从整体上考虑整个XSL的设计,然后将一些表现形式细化成不同的模块,再具体设计这些模块,最后将它们整合在一起,这样,将宏观与微观结合起来,符合人们条理化、规范化要求。
装集装箱--书写模板(块):<xsl:template> <xsl:template match="Replys"> match ── 确定什么样的情况下执行此模板。就是标记的名字; 其中最上层模板必须将match设为"/"。 <xsl:template>用match属性从XML选取满足条件的节点,在真对这些特定的节点形成 一个特定输出形式的模板。
<xsl:for-each select="Reply">循环选择。 select :确定在此上下文环境中应执行什么模板,即选取用< xsl:template >标记建立的模板(块)。 <xsl:value-of> 直接输出选择的。 调用模板(块):<xsl:apply-templates select="Content" /> 调用xsl最后一段。 <xsl:template match="Content"> <xsl:apply-templates /> </xsl:template>
说多了。不太礼貌。 大家新年快乐。 一些基本概念和更多参考微软的"XSL开发者指南": www.microsoft.com/china/msdn/Archives/workshop/xmlfaq.asp
[Web开发]css ul li 不换行 [Web开发]XML与HTML在语法上的主要区别详解 [网页制作]如何正确的理解CSS的float浮动属性? [系统软件]如何让Expat支持中文XML [VB.NET程序]vb.net 与 XML 的操作 [VB.NET程序]vb.net读写xml(2)--实现datagrid与xml的沟通(原创… [VB.NET程序]vb.net 读写xml方法(1) [VB.NET程序][VB.NET+XML]完成简单程序配置 [VB.NET程序]使用Visual Basic操纵XML文档 [VB.NET程序]XML 简单接口 (SAX2)用Visual Basic 实现的示例
|