1

我的 xpath 要么返回

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

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

我使用了以下 xpath :

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

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

谁能帮我做到这一点。

​</p>

4

2 回答 2

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>
于 2012-09-11T11:27:38.230 回答
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 |or13 July 2012 | 13 July 2012 |然后总是返回 |-list 中的第二个值

(但无论如何你都应该切换到 XPath 2,它会好得多......)

于 2012-09-11T15:24:04.683 回答