【发布时间】:2011-05-18 08:17:54
【问题描述】:
给定
<foo>
<bar baz="Hello, World!">
</foo>
除了@baz 的最后 4 个字符之外,我如何处理?我的尝试之一是:
/foo/bar/@baz[substring( ., 0, -4 )]
【问题讨论】:
-
好问题,+1。到目前为止,请参阅我的答案以获取唯一正确的解决方案。 :)
给定
<foo>
<bar baz="Hello, World!">
</foo>
除了@baz 的最后 4 个字符之外,我如何处理?我的尝试之一是:
/foo/bar/@baz[substring( ., 0, -4 )]
【问题讨论】:
这实际上还不错,但是 IIRC 子字符串不喜欢负索引。我试过了
substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-4)
这给了我预期的结果。
【讨论】:
使用:
substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-3)
请注意表达式中的3。
以下错误:
substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-4)
因为这会返回 baz 属性的字符串值的最后 5 个字符。
【讨论】:
substring(/foo/bar/@baz, 1, string-length(/foo/bar/@baz)-3) 请注意,最近版主和其他人一直在“纠正”问题——导致这个混乱:(
试试这个:
substring-before(/foo/bar/@baz,"rld!")
【讨论】: