以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XSL/XSLT/XSL-FO/CSS 』 (http://bbs.xml.org.cn/list.asp?boardid=8) ---- 问个position()的问题 (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=39939) |
-- 作者:211211211 -- 发布时间:11/12/2006 2:06:00 PM -- 问个position()的问题 代码如下: test.xml <NewDataSet> <table>...</table> <table>...</table> </NewDataSet>
test.xsl <xsl:stylesheet version="1.0" <xsl:template match="/NewDataSet"> <table> <xsl:if test="position() mod 5=1"> </xsl:template> </xsl:stylesheet> 输出为: 可以看出,position()不是从table[position()>10 and position()<30]" 的 范围开始计数,而是从头开始,如果想要得到 |
-- 作者:211211211 -- 发布时间:11/12/2006 3:54:00 PM -- 怎么没有人理我?在线等,自己顶一个。 |
-- 作者:211211211 -- 发布时间:11/12/2006 7:17:00 PM -- 对于第二个问题,我试了 document.XSLDocument.selectSingleNode("//*[start-with(@select,'Table')]"); 就是定位不到。 |
-- 作者:fukui -- 发布时间:11/13/2006 12:48:00 PM -- 我吃完饭后帮你看看... |
-- 作者:211211211 -- 发布时间:11/13/2006 1:22:00 PM -- 呵呵,等待中。。 |
-- 作者:fukui -- 发布时间:11/13/2006 2:28:00 PM -- 呵呵,没研究出来,请斑竹吧 |
-- 作者:211211211 -- 发布时间:11/13/2006 4:43:00 PM -- 请斑竹出来解答一下吧,一直在等。 |
-- 作者:Qr -- 发布时间:11/13/2006 6:02:00 PM -- 实际上是你的代码没写好,position()这个东东很容易用错地方,慢慢理解吧。 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="NewDataSet"> <table> <tr> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
-- 作者:211211211 -- 发布时间:11/13/2006 7:58:00 PM -- 呵呵,学习中,谢谢斑竹,另一个问题中 document.XSLDocument.selectSingleNode("//*[start-with(@select,'Table')]"); 为什么定位不到 <xsl:for-each select="Table[position()>=1 and position() <= 15]">的select属性?应该怎么定位? |
-- 作者:211211211 -- 发布时间:11/13/2006 8:29:00 PM -- 还是不行。 我干脆把整个代码贴出,代码是基于Qr的动态分页代码改的。 test.xml <?xml version="1.0" encoding="utf-8" ?> <NewDataSet> test.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" <xsl:template match="/"> if (Num=="first") {PageNum=1;} [color=#FF0000]sortField=document.XSLDocument.selectSingleNode("\\*[start-with(@select,'Table')]");[/color] firstNum=OnePageNum*(PageNum-1)+1; sortField.text=text; Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <body> </html>
<xsl:template match="/NewDataSet"> <tr> <xsl:value-of select="../Table[$nowP]/DownloadCount"/> <tr> <xsl:value-of select="../Table[$nowP+1]/DownloadCount"/> <tr> <tr> <tr> </xsl:stylesheet> 注:附图为结果 而不是预期的
|
-- 作者:Qr -- 发布时间:11/14/2006 9:35:00 AM -- 错了! [此贴子已经被作者于2006-11-15 8:54:45编辑过]
|
-- 作者:Qr -- 发布时间:11/14/2006 9:43:00 AM -- 每遇到分页就统计错误,贴子又不显示:(
|
-- 作者:211211211 -- 发布时间:11/14/2006 2:32:00 PM -- 问一句,把我的代码怎样改一下就可以实现分页的功能? 能不能给我个具体的修改后代码? 很着急,几天了,这个问题一直没有得到解决。请斑竹给个最终解决方案。 |
-- 作者:Qr -- 发布时间:11/14/2006 3:14:00 PM -- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" <xsl:template match="/"> source=document.XMLDocument; if (Num=="first") {PageNum=1;} //sortField=document.XSLDocument.selectSingleNode("NewDataSet[start-with(@select,'Table')]"); firstNum=OnePageNum*(PageNum-1)+1; sortField.text="Table["+text+" and position() mod 5=1]"; Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <body> </html> <tr> <xsl:value-of select="../Table[$nowP]/DownloadCount"/> <tr> <xsl:value-of select="../Table[$nowP+1]/DownloadCount"/> <tr> <tr> <tr> </xsl:stylesheet> |
-- 作者:211211211 -- 发布时间:11/14/2006 4:30:00 PM -- 呵呵,谢谢斑竹,我测试了一下,功能只实现了一半,能找到那个节点的select属性了,但是还是position()的问题不能翻页 <xsl:for-each select="Table[position()>=10 and position() <= 30 and position() mod 5=1]"> <xsl:variable select="position()" name="nowP"></xsl:variable> <tr> <xsl:value-of select="position()"/> </tr> 这里输出的还是 |
-- 作者:Qr -- 发布时间:11/15/2006 9:42:00 AM -- 看你的代码偶就头疼,代码完全不符合偶的风格,而且一大堆垃圾代码。 你没有看清偶在8楼的回复,<xsl:for-each select="Table[position()>=10 and position() <= 30 and position() mod 5=1]">已经过滤了所有不符合条件的记录,故你在xsl:for-each 中取得的position()都不是原XML中的实际position()。要取得XML中的实际position(),就必须在[position()>=10 and position() <= 30 and position() mod 5=1]之前实现,所以,你的代码可能要重写,或者找找其中的对应关系,看如何将1、2、3、4变换为11、16、21、26。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
234.375ms |