我有一个存储电影及其演员的 XML 文件。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<movies
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="movies.xsd">
<movie movieID="1">
<actors>
<actor actorID="1">
<name link="hello">Bob</name>
</actor>
<actor actorID="2">
<name link="hello">Mike</name>
</actor>
</actors>
</movie>
<movie movieID="2">
<actors>
<actor actorID="1">
<name link="hello">Bob</name>
</actor>
<actor actorID="2">
<name>Daniel</name>
</actor>
</actors>
</movie>
</movies>
从上面的代码可以看出,我有 2 个“电影”元素,每个元素包含 2 个“演员”子元素。4 个“name”子元素中有 3 个包含属性“link”:Bob、Mike、Bob
我使用以下 XSLT 代码仅显示包含属性“链接”的参与者的名称:
<xsl:template match="/">
<xsl:text>Actors: </xsl:text>
<xsl:apply-templates select="/movies/movie/actors/actor/name[@link]"/>
</xsl:template>
<xsl:template match="name[@link]">
<xsl:value-of select="." />
<xsl:element name="br" />
</xsl:template>
我得到的输出:
Bob
Mike
Bob
如您所见,“鲍勃”这个名字重复了两次。我只想显示具有“链接”属性的唯一演员姓名
我尝试了以下 XPath 1.0 查询:
<xsl:template match="[not(@name[@link] = preceding::@name)]">
<xsl:template match="not(@name[@link] = preceding::@name)">
<xsl:template match="not(@name[@link] = preceding-sibling::@name)">
所有这些都使页面显示错误。