不能对元素中的多行内容进行子字符串



我有一个多行内容的元素,如下所示:

<root>
<parent>
<child>first line
second line
forth line
</child>
</parent>
</root>

我正在寻找一种只获得第二行的方法,就像这样:

second line

我尝试使用substring-beforesubstring-after的混合物来查找n,但一无所获。我的想法是使用substring-before(substring-after(child, 'n'), 'n')

当然,我仅限于xPath 1.0

我的想法是使用substring-before(substring-after(child, 'n'), 'n')

如果当前上下文节点是parent,则此方法是正确的(如果当前上下文是child元素,则使用.而不是child)。但是n可能不是表示换行符的正确方式。

XPath本身不支持n转义序列,但它也不认为控制字符在字符串文本中是特殊的,它很乐意接受带引号的字符串中的文本换行符。因此,问题是如何在计算XPath表达式的宿主语言中表示换行符。如果使用javax.xml.xpath在Java中评估表达式,则需要使用n:

xpath.evaluate("substring-before(substring-after(child, 'n'), 'n')", parent);

但是在XSLT中(正如您标记的问题),您使用XML字符引用,可以是十进制或十六进制:

<xsl:value-of
select="substring-before(substring-after(child, '&#10;'), '&#10;')" />

XML解析器将属性值中的文本换行转换为空格,因此无法执行

<xsl:value-of select="substring-before(substring-after(child, '
'), '
')" />

尝试:

normalize-space(substring-before(substring-after(child, '&#10;'), '&#10;'))

这是假设行由换行符分隔。否则,请尝试回车(#13)或同时回车(CRLF)。

相关内容

  • 没有找到相关文章

最新更新