我在使用XSLT时遇到了一些麻烦,这是我的XML代码:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE xml_tube SYSTEM "C:\Users\Asus\Desktop\LEIM\tps\tp2\Um utilizador\Utilizador\xml__tube.dtd">
<?xml-stylesheet type="text/xsl" href="utilizadorG.xsl" ?>
<xml_tube>
<playlist>
<lista owner="Guicky" dataIns="2016-10-24" id="PV1">
<titulo>BEST MUSIC.</titulo>
<descricao>Compilation of my favourite music videos.</descricao>
<gostosL gostouL="Guicky"/>
<links_vid vid="Vid2"/>
<links_vid vid="Vid3"/>
<administradores>
<admin ref="Guicky"/>
<admin ref="Daisy"/>
</administradores>
<editores>
<editor ref="Guicky"/>
</editores>
<subscritores>
<subs ref="Daisy"/>
<subs ref="Anabela65"/>
</subscritores>
</lista>
<lista owner="Anabela65" dataIns="2016-02-29" id="PV2">
<titulo>Cooking Lessons!</titulo>
<descricao>Cooking lesson's with Guicky's mom!</descricao>
<links_vid vid="Vid4"/>
<administradores>
<admin ref="Anabela65"/>
<admin ref="Guicky"/>
</administradores>
<editores>
<editor ref="Anabela65"/>
</editores>
<subscritores>
<subs ref="Guicky"/>
<subs ref="Daisy"/>
</subscritores>
</lista>
</playlist>
<comentarios>
<comentario id="C1" refV="Vid1" user="Guicky" data="2016-10-23">
<text>AHAHAHAHA, bom vídeo.</text>
<gosto gostou="Daisy"/>
<respostas>
<texto autor="Daisy">Grande clássico!</texto>
</respostas>
</comentario>
<comentario id="C2" refL="Vid2" user="Anabela65" data="2016-10-22">
<text>Timmy timmy timmy turner...</text>
<gosto gostou="Guicky"/>
<gosto gostou="Daisy"/>
<respostas>
<texto autor="Guicky">U know it.</texto>
<resposta autor="Daisy">LOL!</resposta>
</respostas>
</comentario>
</comentarios>
</xml_tube>`
这是我的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:output doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="eng">
<head>
<title>My XML Tube</title>
<link rel="stylesheet" type="text/css" href="XML_Tube.css" charset="UTF-8"/>
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"/>
<link rel="icon"
type="image.png"
href="favicon-16.png"/>
</head>
<body>
<div class="spacer"/>
<img id="img" src="img/logos/logo.png"/>
<nav>
<ul>
<li><a href="home.html">Playlists</a>
<ul>
<li><a href="../XMLTube.xml#body">Playlist</a></li>
<li><a href="">Playlists</a></li>
</ul>
</li>
<li><a href="portfolio.html">Utilizadores</a>
<ul>
<li><a href="Portfolio.html#NOSLeague">Um utilizador</a></li>
<li><a href="Portfolio.html#PremierLeague">Lista geral de utilizadores</a></li>
</ul>
</li>
<li><a href="contacts.html">Vídeos</a>
<ul>
<li><a href="Contacts.html#gui">Vídeo</a></li>
<li><a href="Contacts.html#rodri">Lista geral de vídeos</a></li>
</ul>
</li>
</ul>
</nav>
<h1 id="lala">Playlists</h1>
<section>
<xsl:for-each select="xml_tube/playlist/lista">
<article class="list">
<figure>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="thumbnail/@link"/>
</xsl:attribute>
<xsl:attribute name="width">50%</xsl:attribute>
<xsl:attribute name="height">auto</xsl:attribute>
</xsl:element>
<figcaption>
<a href="https://www.google.com"><h1><xsl:value-of select="titulo"/></h1></a>
<p><strong>Nome de utilizador: </strong> <xsl:value-of select="@owner"/></p>
<p><strong>Descrição: </strong> <xsl:value-of select="descricao"/></p>
<p><strong>Administradores:</strong> <xsl:value-of select="administradores/admin/@ref"/></p>
<p><strong>Editores: </strong> <xsl:value-of select="editores/editor/@ref"/></p>
<p><strong>Subscritores: </strong> <xsl:value-of select="subscritores/subs/@ref"/>
<xsl:text></xsl:text>
</p>
</figcaption>
</figure>
</article>
</xsl:for-each>
</section>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
基本上我的问题是xsl:for-each只给我第一个属性@subs
。我对administradores/@ref
也有同样的问题。我是葡萄牙语,这是学校工作的一部分,我没有时间翻译每个节点,但我认为这应该不是问题。无论如何,提前谢谢!
我的预期输出是:
Subscritores: Daisy
Subscritores: Anabela
答案 0 :(得分:1)
在XSLT 1.0中 - 显然是您正在使用的 - xsl:value-of
指令仅返回所选节点集中第一个节点的值。
如果要列出所有值,您需要逐个获取它们:例如而不是:
<xsl:value-of select="administradores/admin/@ref"/>
使用:
<xsl:for-each select="administradores/admin">
<xsl:value-of select="@ref" />
<xsl:text> </xsl:text>
</xsl:for-each>