|
首页>编程技术>xml技术> |
按照XML节点顺序处理 |
|
Visited times , Welcome to Data Mining Forum & Data Mining Expert |
|
|
如果我现在有个xml如下, 在xsl中我想把每个“rowset”用不同的方式显示,有没有一个函数来判断是第几个节点的啊?例如 <xsl:if test="node()=1"> 表示第一个节点之类的函数。 <rowset> <row num=1> <company> A </company> <global> 1 </global> </row> <row num=2> <company> B </company> <global> 1 </global> </row> </rowset> <rowset> <row num=1> <company> C </company> <global> 0 </global> </row> <row num=2> 数据挖掘工具 <company> D </company> <global> 0 </global> </row> </rowset> 可以使用 position函数在match里写表达式 /rowset/row[1],查找rowset下第一个row节点 或如上楼,用position函数谢了,再问个问题,如下的xml,我想用list形式来显示,请帮忙。 <rowset> <row> <company> A </company> <site> A1 </site> </row> <row> <company> A </company> <site> A2 </site> </row> <row> <company> B </company> 数据挖掘实验室 <site> B1 </site> </row> <row> <company> A </company> <site> B2 </site> </row> </rowset> 我想把它显示成如下的list形式 +A A1 A2 +B B1 B2 我用了如下的方法,但是不行,好像 for-each 不能嵌套的用于类似我这样的xml结构的,请帮忙解决一下,万分感谢。 <dl> <xsl:for-each select="rowset/row/company_name[not(preceding::company_name=.)]"> <dt> <span> <xsl:value-of select="."/> </span> </dt> 数据挖掘交友 <dd> <ul> <xsl:for-each select="../"> <xsl:if test="company_name={company_name}"> <li> <xsl:value-of select="../site_name"/> </li> </xsl:if> </xsl:for-each> </ul> </dd> test.xml - XML code
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<rowset>
<row>
<company>A</company>
<site> A1 </site>
</row>
<row>
<company>A</company>
<site> A2 </site>
</row>
<row>
<company>B</company>
<site> B1 </site>
</row>
<row>
<company>B</company>
<site> B2 </site>
</row>
</rowset>
数据挖掘研究院 test.xsl - XML code
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:key name="company_group" match="//company" use="./text()" />
<xsl:template match="/">
<xsl:for-each select="//company[count(.|key("company_group",./text())[1])=1]">
+<xsl:value-of select="." /><br/>
<xsl:call-template name="curSites">
<xsl:with-param name="c" select="."/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="curSites">
<xsl:param name="c"/>
<xsl:for-each select="//row[company=$c]/site">
<xsl:value-of select="." /><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
数据挖掘交友 太感谢了,请问有关这方面的资料有没有好书可以推荐呢?没弄过什么这方面的书.主要是在网上找资料,和查看xml sdk我又遇到问题了,我在上面的xsl里想实现二级列表的显示/隐藏功能,但是一直提示我script error,求大大帮忙。- XML code
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:key name="company_group" match="//company" use="./text()" />
<xsl:template match="/">
<html>
<head></head>
<body>
<script>
HideAll = function (obj) {
var items = obj.getElementsByTagName("li");
for (var j=0; j<items.length; j++) {
if (items[j].style.display != "block") {
items[j].style.display = "block";
}
else {
items[j].style.display = "none";
}
}
</script>
<xsl:for-each select="//company[count(.|key("company_group",./text())[1])=1]">
<ul onclick="HideAll(this)"><xsl:value-of select="." />
<xsl:call-template name="curSites">
<xsl:with-param name="c" select="."/>
</xsl:call-template>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="curSites">
<xsl:param name="c"/>
<xsl:for-each select="//row[company=$c]/site">
<li>
<xsl:value-of select="." />
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
数据挖掘交友
- XML code
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:key name="company_group" match="//company" use="./text()" />
<xsl:template match="/">
<html>
<head></head>
<body>
<script>
function HideAll(obj)
{
var items = obj.getElementsByTagName("li");
for (var j=0; j <xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text> items.length; j++)
{
items[j].style.display = items[j].style.display == "" ? "none" : "";
}
}
</script>
<xsl:for-each select="//company[count(.|key("company_group",./text())[1])=1]">
<ul onclick="HideAll(this)" style="cursor:hand"><xsl:value-of select="." />
<xsl:call-template name="curSites">
<xsl:with-param name="c" select="."/>
</xsl:call-template>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="curSites">
<xsl:param name="c"/>
<xsl:for-each select="//row[company=$c]/site">
<li>
<xsl:value-of select="." />
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
或者以你的 HideAll = function(obj) 这种写法也可以. 只不过,如果没有组织js类的话,最好以 function 函数名 (参数) 这种方式去声明. 看起来方便一些.为什么这次我用“<”代替“ <”不行呢,我有好几个函数都是这么做的啊,请大大指教这个跟xsl和版本和stylesheet引用的名称空间有关. - XML code
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
数据挖掘研究院 使用它时, >,<,之类在输出时会是原样的, 或者用cdata <![CDATA[ <script> ..... for(var i=0;i <10;i++) </script> 在这样的声明下,cdata里的内容 < 会被自动换为 < 的, 对于js来说,是不符合它语法的. 如果你希望使用 cdata就能正常, 或者像你其它页面一样用 < 那么将stylesheet声明那段写为 - XML code
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
数据挖掘工具 不过,用第一种写法,在 <script> 中使用 <xsl:text disable-output-escaping="yes"> <![CDATA[ <]]> </xsl:text> 来输出大于号小于号之类的,兼容性更强.Create By Any-Extract(WL-AE) 数据挖掘实验室
|
|
|
|
|
[数据挖掘专家]
[数据挖掘研究院]
[数据挖掘论坛]
[数据挖掘实验室]
|
上一篇:急救一个关于flash接xml的问题
下一篇:有关node
|
|
|
|