如何使这些XSLT结果分隔

时间:2014-08-08 05:10:57

标签: xml xslt xslt-1.0

此XML示例

 <?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy -->
<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>

产生这些结果 -

  

Empire Burlesque Bob Dylan USA Columbia 10.90 1985隐藏你的心   Bonnie Tyler英国哥伦比亚广播公司唱片9.90 1988年Greatest Hits Dolly Parton USA   RCA 9.90 1982仍然得到布鲁斯加里摩尔英国处女记录10.20   1990 Eros Eros Ramazzotti EU BMG 9.90 1997一晚只有Bee Gees UK   Polydor 10.90 1998 Sylvias Mother Dr.Hook UK CBS 8.10 1973 Maggie May   Rod Stewart英国Pickwick 8.50 1990 Romanza Andrea Bocelli欧盟Polydor   10.80 1996当一个男人爱一个女人Percy Sledge USA Atlantic 8.70 1987 Black angel Savage Rose EU Mega 10.90 1995 1999 Grammy Nominees   许多美国格莱美10.20 1999年好时光肯尼罗杰斯英国Mucik   大师8.70 1995大威利风格威尔史密斯美国哥伦比亚9.90 1997   Tupelo Honey Van Morrison英国Polydor 8.20 1971年Soulsville Jorn Hoel   挪威WEA 7.90 1996年最佳Cat Stevens英国岛8.90 1990   停止萨姆布朗英国A和M 8.90 1988年间谍桥T`Pau英国警报器   7.90 1987年私人舞者Tina Turner英国国会大厦8.90 1983 Midt om natten Kim Larsen EU Medley 7.80 1983 Pavarotti Gala Concert Luciano   帕瓦罗蒂英国DECCA 9.90 1991海湾奥的斯雷丁美国的码头   大西洋7.90 1987年图画书Simply Red EU Elektra 7.20 1985 Red   The Communards UK London 7.80 1987 Unchain my heart Joe Cocker USA EMI   1987年8月20日

使用此XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>  
</xsl:template>
</xsl:stylesheet>

问题是如何用逗号分隔此XSLT的结果?

2 个答案:

答案 0 :(得分:0)

如果需要分隔输出,则必须编写XSLT来处理节点,并将文本作为XSLT中的输出。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:apply-templates select="catalog"/>
</xsl:template>

<xsl:template match="catalog">
    <xsl:apply-templates select="cd"/>

</xsl:template>

<xsl:template match="cd">
    <xsl:value-of select="title"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="artist"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="country"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="company"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="price"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="year"/>
    <xsl:text>,</xsl:text>
    <xsl:text>&#xa;</xsl:text>
</xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

以下样式表输出输入XML中的所有文本节点,每行上一个cd元素的内容,以逗号分隔。

以下条件

<xsl:if test="position() != last()">

确保在行尾没有逗号。你没有明确说明这是一个要求,我只是猜测它是。进一步的改进可能是使样式表不在输出文本的最末输出换行符。

样式表(根据@ michael.hor257k的建议编辑)

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="catalog">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="cd">
        <xsl:apply-templates/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:template>

    <xsl:template match="*">
        <xsl:value-of select="."/>
        <xsl:if test="position() != last()">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:template>

</xsl:transform>

<强>输出

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