Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
过滤.xml,然后显示剩余的项目(如果有)_Xml_Xslt - Fatal编程技术网

过滤.xml,然后显示剩余的项目(如果有)

过滤.xml,然后显示剩余的项目(如果有),xml,xslt,Xml,Xslt,我有一个.xml文件,需要使用XSL显示它。现在,XML中的实体是带有标记的视频。不确定这是否重要,但视频可以有多个标签 目标:我需要做的是(对于特定页面)显示所有标记为“cat1”的项目。这很简单,我将使用if: <xsl:if test="tag[. =&#34;cat1&#34;]"> 但是,如果没有标记为“cat1”的项目,也不应列出h1标记-只有在有标记为“cat1”的视频时才应显示 问题:如果存在“cat1”视频,则没有问题。 如果没有标签为“cat

我有一个.xml文件,需要使用XSL显示它。现在,XML中的实体是带有标记的视频。不确定这是否重要,但视频可以有多个标签

目标:我需要做的是(对于特定页面)显示所有标记为“cat1”的项目。这很简单,我将使用if:

<xsl:if test="tag[. =&#34;cat1&#34;]">

但是,如果没有标记为“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>

视频标题
http://URL 在这里
第一类
下面是我一直在尝试的.xsl的代码:

<xsl:template match="/">
    <xsl:for-each select="videos/video">
        <xsl:sort data-type="text" order="ascending" />
        <xsl:if test="tag[. =&#34;cat1&#34;]">
            <h1>Category 1 videos</h1>
            <div class="video">
                <xsl:value-of select="title" />
            </div>
        </xsl:if>
        </xsl:choose>
    </xsl:for-each>
</xsl:template>

第一类影片

此转换:

<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>
<h1>Category 1 videos</h1>
<p>Video title</p>
<p>Video title 2</p>
产生想要的结果

<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>
<h1>Category 1 videos</h1>
<p>Video title</p>
<p>Video title 2</p>
1类视频
视频标题

视频标题2

应用于此XML文档时(无cat1):


视频标题
http://URL 在这里
第二类
视频标题2
http://URL 在这里
第二类


再次生成想要的答案(无)。此转换:

<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>
<h1>Category 1 videos</h1>
<p>Video title</p>
<p>Video title 2</p>
产生想要的结果

<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>
<h1>Category 1 videos</h1>
<p>Video title</p>
<p>Video title 2</p>
1类视频
视频标题

视频标题2

应用于此XML文档时(无cat1):


视频标题
http://URL 在这里
第二类
视频标题2
http://URL 在这里
第二类


再次给出了想要的答案(没有任何结果)。

好问题,+1。请参阅我的答案,以获得完整、简短且简单的解决方案。好问题,+1。请参阅我的答案,以获得完整、简短且简单的解决方案。谢谢!这几乎解决了问题。除了一件事:它只列出了一个,因为其中没有for-each。我摆弄过它,但无法让它工作,它只想显示一个项目。@Patrik Fredrikson:我无法重新解释您在这个解决方案中遇到的问题。我编辑了我的答案,现在它包含一个包含两个
video
元素的XML文档。结果为它们两个都提供了输出——与您的声明相反,它只显示其中一个的数据。只要复制并粘贴新的XML文档并在其上运行转换——您应该会得到与我得到的相同的答案。我做测试时认为有两个“cat1”实体,而实际上我复制/粘贴了错误的实体。谢谢你。顺便说一下,非常感谢你的帮助。极大地降低了我未来在此项目上的工作量!:)谢谢这几乎解决了问题。除了一件事:它只列出了一个,因为其中没有for-each。我摆弄过它,但无法让它工作,它只想显示一个项目。@Patrik Fredrikson:我无法重新解释您在这个解决方案中遇到的问题。我编辑了我的答案,现在它包含一个包含两个
video
元素的XML文档。结果为它们两个都提供了输出——与您的声明相反,它只显示其中一个的数据。只要复制并粘贴新的XML文档并在其上运行转换——您应该会得到与我得到的相同的答案。我做测试时认为有两个“cat1”实体,而实际上我复制/粘贴了错误的实体。谢谢你。顺便说一下,非常感谢你的帮助。极大地降低了我未来在此项目上的工作量!:)