3 回答
TA贡献1794条经验 获得超7个赞
是的,在XPath 1.0中有一种方法可以做到:
concat(
substring($ s1,1,number($ condition)*字符串长度($ s1)),
substring($ s2,1,number(not($ condition))*字符串长度($ s2))
)
这依赖于两个互斥字符串的串联,如果条件为false(0 * string-length(...)),则第一个为空,如果条件为true,则第二个为空。这被称为“贝克尔方法”,归因于奥利弗·贝克尔。
在您的情况下:
concat(
子串(
substring-before(// div [@ id ='head'] / text(),':'),
1,
数(
结尾为(// div [@ id ='head'] / text(),':')
)
* string-length(substring-before(// div [@ id ='head'] / text(),':'))
),
子串(
// div [@ id ='head'] / text(),
1,
编号(不(
结尾为(// div [@ id ='head'] / text(),':')
))
*字符串长度(// div [@ id ='head'] / text())
)
)
虽然我会尝试摆脱"//"以前的所有情况。
同样,有可能//div[@id='head']返回多个节点。
请注意,使用//div[@id='head'][1]更具防御性。
TA贡献1770条经验 获得超3个赞
根据pkarat的法律,您可以在1.0版中实现条件XPath。
对于您的情况,请遵循以下概念:
concat(substring-before(your-xpath[contains(.,':')],':'),your-xpath[not(contains(.,':'))])
这肯定会起作用。看看它怎么运作。给出两个输入
praba:
karan
对于第一个输入:它包含的:条件为true,字符串before : 将作为输出,比如说praba您的输出。第二条件为假,因此没有问题。
对于第二个输入:它不包含,:因此条件失败,到第二个条件时,字符串不包含,:因此条件为true ...因此karan将抛出输出。
最后,你的输出会praba,karan。
- 3 回答
- 0 关注
- 1139 浏览
添加回答
举报