xsl的问题,急!!!!!!!!!!

dwg_cn 2003-05-29 04:43:02
一个xml根节点下有若干子节点,每个子节点有Date的属性。怎么样才能取得所有Date属性值不重复的子节点?
如下
<root>
<data Date="2003-2-4">A</data>
<data Date="2003-2-4">A</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-6">C</data>
<data Date="2003-2-6">C</data>
</root>

要求获得包含3个子节点的NodeList。
...全文
20 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dwg_cn 2003-06-02
  • 打赏
  • 举报
回复
使用for-each的效率太低,因为记录有上万条。这样页面显示会很慢。所以最好有不用循环的方法。
ssm1226 2003-05-30
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="csdn0002.xsl"?>
<root>
<data Date="2003-2-4">A</data>
<data Date="2003-2-4">A</data>
<data Date="2003-2-4">A</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-6">C</data>
<data Date="2003-2-6">C</data>
<data Date="2003-2-7">C</data>
</root>

csdn0002.xsl
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:template match="/">
<!--先进行排序-->
<xsl:variable name="sorted_tf">
<xsl:for-each select="root/data">
<xsl:sort select="@Date"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>

<xsl:variable name="sorted" select="msxsl:node-set($sorted_tf)"/>


<!--排序后,进行过滤-->
<xsl:variable name="filtered_tf">
<xsl:for-each select="$sorted/data">
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="current_date" select="@Date"/>
<xsl:if test="$pos=1 or not($current_date=$sorted/data[$pos - 1]/@Date)">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>

<xsl:variable name="filetered" select="msxsl:node-set($filtered_tf)"></xsl:variable>

<xsl:for-each select="$filetered/data">
tagName:<xsl:value-of select="name()"/>-->Data Attribute:<xsl:value-of select="@Date"></xsl:value-of>
--value:<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
月光易水 2003-05-30
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:key name="attDate" match="@Date" use="." />

<xsl:template match="/">
<xsl:apply-templates select="root"/>
</xsl:template>

<xsl:template match="root">
<table border="1">
<tr><th>date</th><th>value</th></tr>

<xsl:for-each select="data/@Date[generate-id()=generate-id(key('attDate',.))]">

<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select=".."/></td>

</tr>
</xsl:for-each>

</table>
</xsl:template>

</xsl:stylesheet>


:_)
dwg_cn 2003-05-29
  • 打赏
  • 举报
回复
一个xml根节点下有若干子节点,每个子节点有Date的属性。怎么样才能取得所有Date属性值不重复的子节点?
如下
<root>
<data Date="2003-2-4">A</data>
<data Date="2003-2-4">A</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-5">B</data>
<data Date="2003-2-6">C</data>
<data Date="2003-2-6">C</data>
</root>

要求获得包含3个子节点的NodeList。
用xsl或DOM的方法都可以。

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧