使用xpath查找正确的字符串时发出问题

时间:2012-09-11 10:40:20

标签: xpath

我的xpath正在返回

John Hernandez | 12 Jul 201213 July 2012为字符串。

如果字符串包含字符|,那么我想要|之后的字符串,否则我想要整个字符串。

我使用了以下xpath:

 substring-after(string(./div/span[2]),'|')

如果字符串包含|,它会给我正确的输出2012年7月12日但如果我的字符串不包含|它返回null。有没有办法检查字符串是否包含|然后在|后使用字符串o.w返回整个字符串。

任何人都可以帮我这样做。

2 个答案:

答案 0 :(得分:1)

如果您使用的是XPath 2.0,那么这样做:

if (contains(string(div/span[2]), '|')) 
then substring-after(string(div/span[2]),'|') 
else string(div/span[2])

如果你正在使用XPath 1.0,那么你必须在调用substring-after()之前检查XSLT中的字符串(或者你正在使用的任何字符串)。例如:

<xsl:choose>
    <xsl:when test="contains(div/span[2], '|')">
        <xsl:value-of select="substring-after(string(div/span[2]),'|')"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="div/span[2]"/>
    </xsl:otherwise>
</xsl:choose>

答案 1 :(得分:1)

在XPath 1.0中,您可以使用

substring-before(substring-after(concat(string(./div/span[2]), "|", string(./div/span[2]), "|"), "|"), "|")

首先将字符串规范化为John Hernandez | 12 Jul 2012 | John Hernandez | 12 Jul 2012 |13 July 2012 | 13 July 2012 |,然后始终返回| -list

中的第二个值

(但你应该切换到XPath 2,它更好......)