Arrays XSLT中重复项的列表
我是XSLT新手,我正在寻找帮助解决我的问题。以下是我的XML代码:Arrays XSLT中重复项的列表,arrays,list,xslt,unique,Arrays,List,Xslt,Unique,我是XSLT新手,我正在寻找帮助解决我的问题。以下是我的XML代码: <?xml version="1.0" encoding="UTF-8"?> <nadrazi jmeno="Podlešín"> <vlak typ="os" cislo="5112" z="Hostivice" cil="Podlešín" naVlak="53001"> <prijezd>16:20:00</prijez
<?xml version="1.0" encoding="UTF-8"?>
<nadrazi jmeno="Podlešín">
<vlak typ="os" cislo="5112" z="Hostivice" cil="Podlešín" naVlak="53001">
<prijezd>16:20:00</prijezd>
<slozeni>
<vuz cislo="1" oznaceniC="810" />
<vuz cislo="2" oznaceniC="010" oznaceniT="Btax" />
</slozeni>
</vlak>
<vlak typ="os" cislo="53001" z="Podlešín" smer="Zloněves" cil="Kralupy nad Vltavou" zVlaku="5112">
<odjezd>17:00:00</odjezd>
<slozeni>
<vuz cislo="1" oznaceniC="810" />
<vuz cislo="2" oznaceniC="010" oznaceniT="Btax" />
</slozeni>
</vlak>
<vlak typ="sp" cislo="1389" z="Louny" smer="Zloněves" cil="Praha Holešovice">
<prijezd>16:18:00</prijezd>
<odjezd>16:23:00</odjezd>
<slozeni>
<vuz cislo="1" oznaceniC="843" />
<vuz cislo="2" oznaceniT="Btn" />
<vuz cislo="3" oznaceniT="Btn" />
</slozeni>
</vlak>
<vlak typ="r" cislo="572" z="Praha Holešovice" smer="Slaný předměstí" cil="Chomutov">
Nechranice
<prijezd>14:27:00</prijezd>
<odjezd>14:28:00</odjezd>
<slozeni>
<vuz cislo="0" oznaceniC="754" />
<vuz cislo="250" oznaceniT="B" />
<vuz cislo="251" oznaceniT="B" />
<vuz cislo="252" oznaceniT="Bp" />
<vuz cislo="253" oznaceniT="Bp" />
<vuz cislo="254" oznaceniT="BDs" />
<vuz cislo="255" oznaceniT="A" />
</slozeni>
</vlak>
</nadrazi>
输出将是HTML文件,其中数组项将是div的id(div id=“arrayItem”)。现在输出是(时间和空间现在不重要,但我欢迎一些帮助(链接等):
Rozpis vlakůpro statici Podlešin
功能展示(元素){
var srceelement=document.getElementById(元素);
if(srcElement!=null){
if(srcelelement.style.display==“块”){
srcmelement.style.display='none';
}否则{
srcielement.style.display='block';
}
返回false;
}
}
Stanice Podlešin
16:20:00
17:00:00
16:18:00
16:23:00
内克拉尼斯
14:27:00
14:28:00
我想要这个:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Rozpis vlaků pro stanici Podlešín</title>
</head>
<script type="text/javascript">
function show(element) {
var srcElement = document.getElementById(element);
if(srcElement != null) {
if(srcElement.style.display == "block") {
srcElement.style.display= 'none';
} else {
srcElement.style.display='block';
}
return false;
}
}
</script><body>
<h1>Stanice Podlešín</h1>
<div id="Zloněves"></div>
<div id="Slaný předměstí"></div>
</body>
</html>
Rozpis vlakůpro statici Podlešin
功能展示(元素){
var srceelement=document.getElementById(元素);
if(srcElement!=null){
if(srcelelement.style.display==“块”){
srcmelement.style.display='none';
}否则{
srcielement.style.display='block';
}
返回false;
}
}
Stanice Podlešin
在这些div中,我将添加更多数据和我需要的id,以便使用Javascript函数show(id)
隐藏div。所有具有smer=“Zloněves”的元素将位于一个
中,所有具有smer=“Slanýpředměstí”的元素将位于另一个
我发现了一些如何制作数组的问题,但没有解决这个问题。谢谢您的帮助。嗨
这里我没有给出完整的代码,只是给出了获取值的示例
<xsl:for-each select="nadrazi/vlak">
<xsl:if test="@smer='Zloneves'">
<div id =<xsl:value-of select="@smer"/>>
<xsl:value-of select="prijezd"/>
<xsl:value-of select="odjezd"/>
</div>
</xsl:if>
</xsl:for-each>
在上面的示例中,我使用了
元素
上述代码的示例输出将为<div id=Zloněves></div>
17:00:00
<div id=Zloněves></div>
16:18:00
16:23:00
17:00:00
16:18:00
16:23:00
这是一个分组问题,在XSLT1.0中,您需要使用一种称为的技术
您正在根据元素的smer属性对vlak元素进行分组,因此您定义了如下键:
<xsl:key name="vlak" match="vlak[@smer]" use="@smer" />
因此,对于给定的值,键将返回其@smer属性等于该值的所有vlak元素
现在,要获得不同的元素,需要将键中首先出现的@vlak元素与其给定的@smer值进行匹配。这是这样做的:
<xsl:template match="vlak[generate-id() = generate-id(key('vlak', @smer)[1])]" mode="smer">
然后在这个模板中,如果您愿意,要获得这个组的所有vlak元素,只需访问密钥
<xsl:for-each select="key('vlak', @smer)">
您唯一需要的是一个模板来匹配其他vlak元素,以阻止它们在该循环之外输出
<xsl:template match="vlak" mode="smer" />
这是完整的XSLT(为了简洁起见,我删除了javascript)
Rozpis vlakůpro statici
斯坦尼斯
应用于XML时,将输出以下内容
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>Rozpis vlaků pro stanici Podlešín</title>
</head>
<body>
<h1>Stanice Podlešín</h1>
<div id="Zloněves">17:00:00 16:23:00</div>
<div id="Slaný předměstí">14:28:00</div>
</body>
</html>
Rozpis vlakůpro statici Podlešin
Stanice Podlešin
17:00:00 16:23:00
14:28:00
请发布您的XSLTAlso代码,您能显示您想要输出的XML吗?谢谢谢谢你的评论。问题已更新。好的,这个小帮助,但现在有两个相同的ID,但我只想要一个。一个
和一个`。这是我的主要问题。
<xsl:template match="vlak" mode="smer" />
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:key name="vlak" match="vlak[@smer]" use="@smer" />
<xsl:template match="/">
<html>
<head>
<title>Rozpis vlaků pro stanici <xsl:value-of select="nadrazi/@jmeno" /></title>
</head>
<body>
<h1>Stanice <xsl:value-of select="nadrazi/@jmeno" /></h1>
<xsl:apply-templates select="nadrazi" mode="smer" />
</body>
</html>
</xsl:template>
<xsl:template match="vlak[generate-id() = generate-id(key('vlak', @smer)[1])]" mode="smer">
<div>
<xsl:attribute name="id"><xsl:value-of select="@smer" /></xsl:attribute>
<xsl:for-each select="key('vlak', @smer)">
<xsl:value-of select="odjezd" />
</xsl:for-each>
</div>
</xsl:template>
<xsl:template match="vlak" mode="smer" />
</xsl:stylesheet>
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>Rozpis vlaků pro stanici Podlešín</title>
</head>
<body>
<h1>Stanice Podlešín</h1>
<div id="Zloněves">17:00:00 16:23:00</div>
<div id="Slaný předměstí">14:28:00</div>
</body>
</html>