substring-after和substring-before使用元素而不是字符串

时间:2015-11-10 14:44:33

标签: xml xslt

是否可以使用substring-before和substring-after将元素作为选择器?如果没有,你会怎么做?

如果我有这个代码段,

<root>
    <element>This is an example. Some text here | and some text there</element>
</root>

我可以使用substring-before或substring-after和pipe |获取左侧或右侧的文字

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:template match="root">          
    <element><xsl:value-of select="substring-before(element, '|')"/></element>
</xsl:template>
</xsl:stylesheet>

获取

<?xml version="1.0" encoding="UTF-8"?>
<element1>This is an example. Some text here </element1>

但是我怎么能用分隔文本的元素来做,比如lb或alt?

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element>This is an example. Some text here <alt type="divider"/> and some text there</element>
</root>

我正在考虑与兄弟姐妹的事情,但我不想返回一个元素,但字符串。所以我无法真正地围绕它。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

路径/root/element/text()[1]会在alt元素之前提供文本节点,在/root/element/text()[2]元素之后提供文本节点的路径alt,这假设您知道存在这样一个元素,你有两个由元素分隔的文本节点。无论如何value-of输出节点的字符串值,您永远不会使用value-of输出节点本身。

答案 1 :(得分:0)

是的,这个XPath表达式

/root/element/text()[not(preceding-sibling::alt)]

选择之前的文本 alt

 and some text there

和他的XPath表达式,

/root/element/text()[not(following-sibling::alt)]

选择 alt后的文字

 and some text there