Примечание 1: Это мой первый вопрос здесь. Пожалуйста, будьте нежны.
Примечание 2: Да, это домашнее задание. Ненавижу просить помощи, но я врезался в кирпичную стену. Если вы не хотите, чтобы сказать мне ответ, предложение того, где искать ответ, будет одинаково признателен. Спасибо.
Я пытаюсь написать лист XSLT, в котором рассматривается атрибут жанра каждого элемента DVD в целевом XML-файле. Предполагается, что будет возвращен список, в котором каждое из различных значений будет перечислено ровно один раз с подсчетом количества раз, когда каждое значение было найдено.
Я думаю, что мой XPath неверен. Для отладки я попытался использовать операторы <xsl:value-of select="foo">
, чтобы попробовать разные запросы XPath, но мне не повезло.
Вот файл XSL (я пытался раздеть его до латуни)
<?xml version="1.0" encoding="UTF-8"?>
<!-- BrowseAllExample.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="genres" match="DVD" use="@genre" />
<xsl:template match="/">
<html>
<head>
<title>Browse: DVDs by Genre</title>
<link href="../style/browseByGenre.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- TODO: insert page header here -->
<h2>Browse by Genre</h2>
<div>
<!-- This doesn't seem to select anything
I've tried lots of combinations with a test
xsl:value-of-select element, but nothing
seems to work as a selector except "*"
-->
<xsl:apply-templates select="/dvdlist/DVD[not(@genre=preceding-sibling/@genre)]"
mode="genreList">
<xsl:sort select="@genre"/>
</xsl:apply-templates>
</div>
</body>
</html>
</xsl:template>
<!--
List each genre and count titles in each
-->
<xsl:template match="DVD" mode="genreList">
<a href="#{generate-id()}"><xsl:value-of select="@genre"/></a> (<xsl:value-of
select="count(key('genres',@genre))"/>) -
</xsl:template>
</xsl:stylesheet>
Вот соответствующая часть файла XML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- dvdlistExample.xml -->
<?xml-stylesheet type="text/xsl" href="BrowseAllExample.xsl"?>
<dvdlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.com/dvdlist ./schema/dvdlist.xsd"
xmlns="http://example.com/dvdlist">
<DVD genre="Comedy" itemnum="ID-20">
<title>American Wedding</title>
<year>2003</year>
<price>18.89</price>
<talent>
<director>Jesse Dylan</director>
<actor>Jason Biggs</actor>
<actor>Sean William Scott</actor>
<actor/>
</talent>
<ratings mpaa="NR" customer="3"/>
<pics id="ID-20">
<thumbnail>Wedding-small.jpg</thumbnail>
<large>Wedding-big.jpg</large>
</pics>
</DVD>
<DVD genre="Action" itemnum="ID-2">
<title>Badboys II</title>
<year>2003</year>
<price>20.27</price>
<talent>
<director>Michael Bay</director>
<actor>Will Smith</actor>
<actor>Martin Lawrence</actor>
</talent>
<ratings mpaa="R" customer="3"/>
<pics id="ID-2">
<thumbnail>Badboys-small.jpg</thumbnail>
<large>Badboys-big.jpg</large>
</pics>
</DVD>
<!--Other DVD entries removed to save space-->
</dvdlist>