Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 显示相同级别元素的xsl if条件_Xml_Xslt_If Statement - Fatal编程技术网

Xml 显示相同级别元素的xsl if条件

Xml 显示相同级别元素的xsl if条件,xml,xslt,if-statement,Xml,Xslt,If Statement,在if条件之后,如何显示相同级别的元素值 比如说 XML 皇帝讽刺剧 鲍勃·迪伦 美国 哥伦比亚 10.90 1985 隐藏你的心 邦尼泰勒 英国 哥伦比亚唱片公司 9.90 1988 最成功的 多莉·帕顿 美国 RCA 9.90 1982 XSLT 这不会使英国级别元素的标题和艺术家不高兴 我知道解决这个问题的一种方法是对每个循环使用,但我正在寻找一种有效的方法,如下所示: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XS

在if条件之后,如何显示相同级别的元素值

比如说

XML


皇帝讽刺剧
鲍勃·迪伦
美国
哥伦比亚
10.90
1985
隐藏你的心
邦尼泰勒
英国
哥伦比亚唱片公司
9.90
1988
最成功的
多莉·帕顿
美国
RCA
9.90
1982

XSLT


这不会使英国级别元素的标题和艺术家不高兴

我知道解决这个问题的一种方法是对每个循环使用,但我正在寻找一种有效的方法,如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/catalog/cd">
    <xsl:if test="country = 'UK'">
        <xsl:value-of select="title"/>
        <xsl:value-of select="artist"/>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

产生:

<?xml version="1.0" encoding="UTF-8"?>

Hide your heartBonnie Tyler

把你的心藏起来邦妮·泰勒
这是:


产生:

<?xml version="1.0" encoding="UTF-8"?>

Hide your heartBonnie Tyler

把你的心藏起来邦妮·泰勒

这只能使用模板完成:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/catalog/cd[country='UK']" priority="1">
        <xsl:value-of select="title"/>
        <xsl:value-of select="artist"/>
    </xsl:template>
    <xsl:template match="/catalog/cd">
        <!--  handle non-UK CDs here -->
    </xsl:template>
</xsl:stylesheet>

当然,根据您的需求,还有许多其他方法可以安排模板以生成所需的输出。例如,您可能会得到显式模板,用于处理
title
artist
元素(或显式隐藏每个
cd
的所有其他子元素)


所有这一切都取决于您的特殊需要,但我想在这里说明的一点是,当您在模板匹配中正确捕获目标元素时,您可以获得很多功能(并最终获得更干净的代码)。(而不是特殊条件)。

这可以仅使用模板完成:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/catalog/cd[country='UK']" priority="1">
        <xsl:value-of select="title"/>
        <xsl:value-of select="artist"/>
    </xsl:template>
    <xsl:template match="/catalog/cd">
        <!--  handle non-UK CDs here -->
    </xsl:template>
</xsl:stylesheet>

当然,根据您的需求,还有许多其他方法可以安排模板以生成所需的输出。例如,您可能会得到显式模板,用于处理
title
artist
元素(或显式隐藏每个
cd
的所有其他子元素)

所有这一切都取决于您的特殊需要,但我想在这里说明的一点是,当您在模板匹配中正确捕获目标元素时(而不是特殊条件),您将获得大量的能力(并最终获得更干净的代码)