我有一个.xml,我需要使用XSL显示。现在,XML中的实体是带有标签的视频。不确定是否重要,但视频可以有多个标签。
目标:我需要做的是(对于特定页面)显示所有标记为“cat1”的项目。这很简单,我只使用if:
<xsl:if test="tag[. ="cat1"]">
但是,如果没有标记为“cat1”的项目,它也不应该列出h1标签 - 只有在有任何带有“cat1”标签的视频时才会显示。
问题:如果有“cat1”的视频存在,没问题。 如果没有标记为“cat1”的视频,则会显示h1标签,但不会显示视频。这显然是不可接受的。
所以问题就变成了;
如何通过检查视频项目来过滤视频项目,并且只有在确定仍有视频后,才会显示剩余的代码?
以下是xml的代码:
<videos>
<video>
<title>Video title</title>
<subtitle></subtitle>
<description_long>
<![CDATA[Description]]>
</description_long>
<link language="English">http://URL here</link>
<tag>cat1</tag>
</video>
</demos>
以下是我一直在尝试的.xsl的代码:
<xsl:template match="/">
<xsl:for-each select="videos/video">
<xsl:sort data-type="text" order="ascending" />
<xsl:if test="tag[. ="cat1"]">
<h1>Category 1 videos</h1>
<div class="video">
<xsl:value-of select="title" />
</div>
</xsl:if>
</xsl:choose>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="video[tag='cat1'][1]">
<h1>Category 1 videos</h1>
<xsl:apply-templates select="../video[tag='cat1']" mode="process"/>
</xsl:template>
<xsl:template match="video" mode="process">
<p><xsl:value-of select="title"/></p>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于提供的XML文档(已更正为格式良好并添加了第二个video
元素):
<videos>
<video>
<title>Video title</title>
<subtitle></subtitle>
<description_long><![CDATA[Description]]></description_long>
<link language="English">http://URL here</link>
<tag>cat1</tag>
</video>
<video>
<title>Video title 2</title>
<subtitle></subtitle>
<description_long><![CDATA[Description]]></description_long>
<link language="English">http://URL here</link>
<tag>cat1</tag>
</video>
</videos>
产生想要的结果:
<h1>Category 1 videos</h1>
<p>Video title</p>
<p>Video title 2</p>
应用于此XML文档(无cat1):
<videos>
<video>
<title>Video title</title>
<subtitle></subtitle>
<description_long><![CDATA[Description]]></description_long>
<link language="English">http://URL here</link>
<tag>cat2</tag>
</video>
<video>
<title>Video title 2</title>
<subtitle></subtitle>
<description_long><![CDATA[Description]]></description_long>
<link language="English">http://URL here</link>
<tag>cat2</tag>
</video>
</videos
&GT;
再次产生想要的答案(无)。