很多时候,mp3标签的形式为"艺术家 - 标题",但存储在标题栏中。
我想将值拆分为艺术家+标题字段。
分割之前/之后的例子:
<title>Artist - Title</title>
<title> - Title</title>
<title>Artist - </title>
<title>A title</title>
后:
<artist>Artist</artist><<title>Title</title>
<artist /><title>Title</title>
<artist>Artist</artist><title />
<artist /><title>A title</title>
我在XSLT编程方面做得不多,所以我不知道我在常规语言中使用的成语是否适合,如果有,那么XSLT语言元素最适合使用。
这就是我正常接近它的方式:
title
元素,并返回空artist
元素title
元素中删除,然后将title
标记的其余部分作为新title
元素返回,并返回空artist
元素title
元素中删除,然后将title
标记的其余部分作为新artist
元素返回,并返回空{{ 1}}元素title
元素的位置,将其后的所有内容作为新的artist
元素返回答案 0 :(得分:1)
除了讨论“删除”等不适用(XSLT程序读取输入并生成输出;它们不改变输入),您的描述是非常好的匹配。在这里(未经测试)是人们可以写它的方式(除了我不会对它进行大量评论):
<xsl:template match="title">
<!--* input often has artist - title in title element *-->
<!--* So emit an artist element and populate it with
* the string value preceding the hyphen.
* (If there is no hyphen, string-before(.,'-') returns ''.)
* Normalize space to lose the pre-hyphen blank.
* If hyphens can appear in normal titles, change '-'
* to ' - '.
*-->
<xsl:element name="artist">
<xsl:value-of select="normalize-space(
substring-before(.,'-'))"/>
</xsl:element>
<!--* Now emit a title with the rest of the value. *-->
<xsl:element name="title">
<xsl:choose>
<xsl:when test="contains(.,'-')">
<xsl:value-of select="normalize-space(
substring-after(.,'-'))"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>