2016-11-18 24 views
0

我有下面给出的XML。XSLT:将用于记录筛选的参数传递给XSL:IF表达式

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

<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Hide your heart</title> 
    <artist>Bonnie Tyler</artist> 
    <country>UK</country> 
    <company>CBS Records</company> 
    <price>9.90</price> 
    <year>1988</year> 
    </cd> 
    <cd> 
    <title>Greatest Hits</title> 
    <artist>Dolly Parton</artist> 
    <country>USA</country> 
    <company>RCA</company> 
    <price>9.90</price> 
    <year>1982</year> 
    </cd> 
    <cd> 
    <title>Still got the blues</title> 
    <artist>Gary Moore</artist> 
    <country>UK</country> 
    <company>Virgin records</company> 
    <price>10.20</price> 
    <year>1990</year> 
    </cd> 
    <cd> 
    <title>Eros</title> 
    <artist>Eros Ramazzotti</artist> 
    <country>EU</country> 
    <company>BMG</company> 
    <price>9.90</price> 
    <year>1997</year> 
    </cd> 
    <cd> 
    <title>One night only</title> 
    <artist>Bee Gees</artist> 
    <country>UK</country> 
    <company>Polydor</company> 
    <price>10.90</price> 
    <year>1998</year> 
    </cd> 
    <cd> 
    <title>Sylvias Mother</title> 
    <artist>Dr.Hook</artist> 
    <country>UK</country> 
    <company>CBS</company> 
    <price>8.10</price> 
    <year>1973</year> 
    </cd> 
    <cd> 
    <title>Maggie May</title> 
    <artist>Rod Stewart</artist> 
    <country>UK</country> 
    <company>Pickwick</company> 
    <price>8.50</price> 
    <year>1990</year> 
    </cd> 
    <cd> 
    <title>Romanza</title> 
    <artist>Andrea Bocelli</artist> 
    <country>EU</country> 
    <company>Polydor</company> 
    <price>10.80</price> 
    <year>1996</year> 
    </cd> 
    <cd> 
    <title>When a man loves a woman</title> 
    <artist>Percy Sledge</artist> 
    <country>USA</country> 
    <company>Atlantic</company> 
    <price>8.70</price> 
    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Black angel</title> 
    <artist>Savage Rose</artist> 
    <country>EU</country> 
    <company>Mega</company> 
    <price>10.90</price> 
    <year>1995</year> 
    </cd> 
    <cd> 
    <title>1999 Grammy Nominees</title> 
    <artist>Many</artist> 
    <country>USA</country> 
    <company>Grammy</company> 
    <price>10.20</price> 
    <year>1999</year> 
    </cd> 
    <cd> 
    <title>For the good times</title> 
    <artist>Kenny Rogers</artist> 
    <country>UK</country> 
    <company>Mucik Master</company> 
    <price>8.70</price> 
    <year>1995</year> 
    </cd> 
    <cd> 
    <title>Big Willie style</title> 
    <artist>Will Smith</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>9.90</price> 
    <year>1997</year> 
    </cd> 
    <cd> 
    <title>Tupelo Honey</title> 
    <artist>Van Morrison</artist> 
    <country>UK</country> 
    <company>Polydor</company> 
    <price>8.20</price> 
    <year>1971</year> 
    </cd> 
    <cd> 
    <title>Soulsville</title> 
    <artist>Jorn Hoel</artist> 
    <country>Norway</country> 
    <company>WEA</company> 
    <price>7.90</price> 
    <year>1996</year> 
    </cd> 
    <cd> 
    <title>The very best of</title> 
    <artist>Cat Stevens</artist> 
    <country>UK</country> 
    <company>Island</company> 
    <price>8.90</price> 
    <year>1990</year> 
    </cd> 
    <cd> 
    <title>Stop</title> 
    <artist>Sam Brown</artist> 
    <country>UK</country> 
    <company>A and M</company> 
    <price>8.90</price> 
    <year>1988</year> 
    </cd> 
    <cd> 
    <title>Bridge of Spies</title> 
    <artist>T`Pau</artist> 
    <country>UK</country> 
    <company>Siren</company> 
    <price>7.90</price> 
    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Private Dancer</title> 
    <artist>Tina Turner</artist> 
    <country>UK</country> 
    <company>Capitol</company> 
    <price>8.90</price> 
    <year>1983</year> 
    </cd> 
    <cd> 
    <title>Midt om natten</title> 
    <artist>Kim Larsen</artist> 
    <country>EU</country> 
    <company>Medley</company> 
    <price>7.80</price> 
    <year>1983</year> 
    </cd> 
    <cd> 
    <title>Pavarotti Gala Concert</title> 
    <artist>Luciano Pavarotti</artist> 
    <country>UK</country> 
    <company>DECCA</company> 
    <price>9.90</price> 
    <year>1991</year> 
    </cd> 
    <cd> 
    <title>The dock of the bay</title> 
    <artist>Otis Redding</artist> 
    <country>USA</country> 
    <company>Atlantic</company> 
    <price>7.90</price> 
    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Picture book</title> 
    <artist>Simply Red</artist> 
    <country>EU</country> 
    <company>Elektra</company> 
    <price>7.20</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Red</title> 
    <artist>The Communards</artist> 
    <country>UK</country> 
    <company>London</company> 
    <price>7.80</price> 
    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Unchain my heart</title> 
    <artist>Joe Cocker</artist> 
    <country>USA</country> 
    <company>EMI</company> 
    <price>8.20</price> 
    <year>1987</year> 
    </cd> 
</catalog> 

用于过滤下面给出的记录的XSL文件。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<catalog> 
    <xsl:for-each select="catalog/cd"> 
    <xsl:if test = "country = 'USA'"> 
    <cd> 
    <title><xsl:value-of select="title"/></title> 
    </cd> 
    </xsl:if> 
    </xsl:for-each> 
</catalog> 
</xsl:template> 
</xsl:stylesheet> 

转换后的输出XML文件如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
<cd><title>Empire Burlesque</title></cd> 
<cd><title>Greatest Hits</title></cd> 
<cd><title>When a man loves a woman</title></cd> 
<cd><title>1999 Grammy Nominees</title></cd> 
<cd><title>Big Willie style</title></cd> 
<cd><title>The dock of the bay</title></cd> 
<cd><title>Unchain my heart</title></cd> 
</catalog> 

在这里过滤条件已在XLST硬编码为国家=“USA”

但我需要通过过滤值即; USA在执行时作为XSLT的参数。像国家= '$美国'

如何通过这个国家的值作为参数传递给XSL文件

回答

0

添加

<xsl:param name="country"/> 

<xsl:template>上方并更换如果

<xsl:if test="country = $country"> 

传递参数的方式会根据使用的xsl处理器而有所不同。 例如

xsltproc --stringparam country USA your.xsl you.xml

0

<xsl:param name="country"/> 
<xsl:template match="/"> 
<catalog> 
    <xsl:for-each select="catalog/cd[country=$country]"> 
    <cd> 
     <title><xsl:value-of select="title"/></title> 
    </cd> 
    </xsl:for-each> 
</catalog> 
</xsl:template> 

我有点吃惊,你应该需要来StackOverflow的这样一个基本问题。就个人而言,在我开始使用任何新语言编写代码之前,我自己写了一本关于该主题的书,并从封面上阅读。它节省了很多时间。