У меня есть этот XML:Я не понимаю, почему у меня нет возможности для этой глобальной переменной и есть ли альтернатива?
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="aj.xsl"?>
<Test>
<Highlight>
<HighlightName>Name 1</HighlightName>
<HighlightName>Name 2</HighlightName>
<HighlightName>Name 3</HighlightName>
<HighlightName>Name 5</HighlightName>
<HighlightName>Name 6</HighlightName>
</Highlight>
<Date>
<Name>Name 1</Name>
</Date>
<Date>
<Name>Name 6</Name>
</Date>
<Date>
<Name>Name 2</Name>
</Date>
<Date>
<Name>Name 7</Name>
</Date>
<Date>
<Name>Name 3</Name>
</Date>
<Date>
<Name>Name 8</Name>
</Date>
<Date>
<Name>Name 4</Name>
</Date>
<Date>
<Name>Name 9</Name>
</Date>
<Date>
<Name>Name 5</Name>
</Date>
</Test>
и некоторый тест XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<link rel="stylesheet" type="text/css" href="Workbook-S-140-Version2.css"/>
<title>Test</title>
</head>
<body>
<xsl:for-each select="Test/Highlight/HighlightName">
<xsl:variable name="strHighlightName" select="."/>
<p>Start of list for {$strHighlightName}</p>
<xsl:for-each select="Test/Date">
<xsl:apply-templates select="Name"/>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="Name">
<p>
<xsl:if test="$strHighlightName=.">
<xsl:text>**</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</p>
</xsl:template>
</xsl:stylesheet>
Образец короток, чтобы передать этот вопрос. В финальном сценарии мои файлы более подробные.
Основная концепция, которую я пыталась реализовать, состояла в том, чтобы перебирать список известных имен, которые я хотел выделить. Затем, между прочим, я хотел указать, было ли какое-либо из названий в другом месте одним из выделенных. Так что я попробовал выше, но, к сожалению, переменная strHighlightName не видна Название template.
Я понимаю, что могу использовать параметры и подавать значение в шаблон, но в реальном мире мне пришлось бы каскадировать этот параметр, все в шаблоне могут вызвать имя.
Поскольку я не могу использовать этот подход, могу ли я сделать это по-другому? Например, могу ли я сделать что-то вроде этого:
<xsl:template match="Name">
Does "." match any of the names in the "//Highlight/HighlightName" section?
If yes
Text "** "
</xsl:template>
Это имеет смысл? Это позволит избежать необходимости в переменных и/или параметрах прохождения.
спасибо.