Lilypond的歌词XSL功能

  • 本文关键字:XSL 功能 Lilypond xslt
  • 更新时间 :
  • 英文 :


对不起我的英语。我正在寻找XSL中的提示或功能,可以发现标签后是否有空间,如果是正确的,则该功能应该会产生某种内容。

背景:我想在XML中写歌曲的歌词,因为有各种各样的musik programms,需要一种特殊的语法来使用歌词。

例如,软件" Songsheet Generator"需要语法:

[C]Where have all the [Am]flowers gone

用于显示(和转移)c- am-akkord。

毫无问题地标记C,就像<akkord>C</akkord>一样,并像

一样写XSL
<xsl:template match="akkorde">
<span style="color:green">[<xsl:value-of select="." />]</span>
</xsl:template> 

太久了太好了(我们在德国说)。

现在,我想使用" lilypond"符号编程中的歌词,它需要此语法:

Where4 have8 all2 the8 flow-8ers4 gone?2

通过撰写本文,该软件知道," where"是四分之一说明," have"是1/8 ...(Lilypond在适当的注释下设置了单词)

您看到,"花"一词被" - "分开。这是因为单词有两个笔记(或两个音节)。(在Lilypond,每个点,逗号,问号...是在音节持续时间之前设置的)

在这种背景下,我想这样写我的XML:

<akkord>C</akkord>Where<duration>4</duration> have<duration>8</duration> all<duration>2</duration> the<duration>8</duration> <akkord>Am</akkord>flow<duration>8</duration>ers<duration>4</duration> gone<duration>2</duration>

现在,我需要一个XSL功能,该功能在" Flow-8ers4"中设置Seperator/nyphen( - ),如果单词中的持续时间标签。如果持续时间标签在单词的末尾,例如" where4",则不应出现Semperator。

我认为类似于"如果持续时间标签之后没有空间,那么它必须在单词中,然后该功能应在持续时间标签之前放置Seperator/nyphen( - )"。但是您在上面看到,歌词结束时有一个问号。因此,功能还必须查看,如果第一个符号是空间或点,则必须查看逗号....

当然,我也可以标记Semperator。但这是这样做的更多工作。我希望一个功能能够更好/更快。

希望您了解我的写作。感谢您的提示。

xslt看不到标签,它只看到元素节点。编写为<duration>4</duration>的元素具有两个标签,一个起始标签和一个结束标签。现在要了解您的问题,我需要看到您的意思是"标签"一词,我认为您的意思是"元素节点"。

您可以测试当前元素节点是否立即接下来是文本节点,该节点从使用测试的特定字符之一开始:

<xsl:if test="following-sibling::node()[1][self::text()[translate(substring(.,1,1), ' ?!.,:;()', '') = '']"/>

在XSLT 2.0中,您可以使用正则表达式概括测试:

matches(., '^W')

测试字符是否是"非字"字符(一类广泛的标点字符,分离器和符号)。

这是否完全满足您的要求。例如,我尚不清楚当duration元素紧随其后是另一个元素节点而不是文本节点时,会发生什么。

最新更新