假设我有一个包含以下内容的XML文件:
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<location>USA;New York</location>
<year>1985</year>
</cd>
<cd>
<title>Empire Burlesque II</title>
<artist>Bob Dylan</artist>
<location>USA;Houston</location>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<location>UK;London</location>
<year>1988</year>
</cd>
.
.
.
我的xml文件有点像这样
<bookmark xml-lang="en-US" branch="index" id="bm_id3">
<bookmark_value>bullet lists;creating while typing</bookmark_value>
<bookmark_value>lists;automatic numbering</bookmark_value>
.
.
.
使用这个xml,我想生成一个位置列表,如:
USA
New York
Houston
UK
London
但目前我只能将单级列表作为
USA;New York
USA;Houston
UK;London
如何在没有对xml文件进行任何更改 的情况下完成此操作?
关于代码,我使用XSLT 1.0并获取列表的代码是(我的xml文件与上面提到的xml文件不同,因为它只是为了介绍问题)
<xsl:key name="b_parent" match="bookmark_value" use="substring-before(bookmark_value, ';')" />
<xsl:template match="/">
<xsl:for-each select="//bookmark[@branch='index']">
<xsl:for-each select="bookmark_value[count(. | key('b_parent', substring-before(bookmark_value, ';'))[1])=1 ]">
<xsl:sort select="substring-before(bookmark_value, ';')"/>
<xsl:variable name="href" select="concat($filename,'#',@id)"/>
<li><a href="{$href}" target="_top">
<xsl:value-of select="substring-before(., ';')"/>
</a></li>
<xsl:for-each select="key('b_parent', substring-before(bookmark_value, ';'))">
<xsl:sort select="substring-after(., ';')" />
<ul><li><xsl:value-of select="substring-after(., ';')" /></li></ul>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:0)
按以下方式对您的记录进行分组:
substring-before(concat(location, ';'), ';')