XSL选择第一行纯文本

时间:2013-09-16 08:23:37

标签: xslt linefeed

我有一个内容类型为纯文本的xml文件。我想要做的是在xsl转换中使用第一行作为标题。它应该如何形成?我尝试使用各种术语作为分隔符,如<登记/>  但没有结果。 输入

<contentSet>
<inlineData contenttype="text/plain" >
Et, sent luptat luptat, commy nim zzriureet vendreetue modo
dolenis ex euisis nosto et lan ullandit lum doloreet vulla
feugiam coreet, cons eleniam il ute facin veril et aliquis ad
minis et lor sum del iriure dit la feugiamcommy nostrud min ulla
</inlineData>
</contentSet>

并希望输出类似这样的内容

<doc>
<story>
<headline>
  Et, sent luptat luptat, commy nim zzriureet vendreetue modo   
 </headline>
<text>
Et, sent luptat luptat, commy nim zzriureet vendreetue modo
dolenis ex euisis nosto et lan ullandit lum doloreet vulla
feugiam coreet, cons eleniam il ute facin veril et aliquis ad
minis et lor sum del iriure dit la feugiamcommy nostrud min ulla
</text>
</story>
</doc>

1 个答案:

答案 0 :(得分:5)

从技术上讲,inlineData元素中的第一行是空的,只有第二行包含文本。假设您想要处理的所有输入的结构相同,您可以使用

<xsl:template match="contentSet">
  <story>
    <headline><xsl:value-of select="substring-before(substring-after(inlineData, '&#10;'), '&#10;')"/></headline>
    <text><xsl:value-of select="."/></text>
  </story>
</xsl:template>

我意识到这很脆弱,但XSLT / XPath 1.0中的字符串处理很弱,在XSLT 2.0中你可以使用<xsl:value-of select="tokenize(inlineData, '\n')[normalize-space()][1]"/>