对不起我的英语。我正在寻找XSL中的提示或功能,可以发现标签后是否有空间,如果是正确的,则该功能应该会产生某种内容。
背景:我想在XML中写歌曲的歌词,因为有各种各样的musik programms,需要一种特殊的语法来使用歌词。
例如,软件" Songsheet Generator"需要语法:
[C]Where have all the [Am]flowers gone
用于显示(和转移)c- am-akkord。
毫无问题地标记C,就像<akkord>C</akkord>
一样,并像
<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
元素紧随其后是另一个元素节点而不是文本节点时,会发生什么。