代码之家  ›  专栏  ›  技术社区  ›  Maury Markowitz

使用xpath提取子字符串,其中字段中可能没有尾随分隔符

  •  1
  • Maury Markowitz  · 技术社区  · 8 年前

    我试图解析一个XML文件,其中用户(以他们无限的智慧)在一个自由格式的字段中键入一个键值, <Description> . 这些值通常与返回一起键入(br's?)他们之间。例如:

    <Description>
    % Increase: 27%
    Completion Date: 10-Aug-2015
    </Description>
    

    我需要在字符串“完成日期”后面查找一个提取日期:“环顾四周,这样我找到了类似的东西,并将其修改为:

    compdate = deal.SelectSingleNode("./Terms/Description[substring-before(substring-after(.,'Completion Date:'),'/')]")
    

    问题是,在原始问题中,有一个尾随字符可以用来分隔文本,a/。在我的例子中,可能有某种类型的BR,或者它可能是行中的最后一个(就像在本例中一样)或者唯一一个项目,因此没有分隔符。

    所以…如何提取日期的建议?我可以在vb方面做,但是为了代码的清晰性,我想留在xpath世界中——当然,除非得到的xpath不可读。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Andersson    8 年前

    如果可以接受xpath 2.0解决方案,请尝试

    ./Terms/Description/tokenize(substring-after(.,'Completion Date: '), '\n')[1]
    

    如果不是,则日期格式始终为 DD-mon-YYYY (例如) 01-Dec-2018 尝试

    ./Terms/Description/substring(substring-after(.,'Completion Date: '), 1, 11)