如何在XPath中选择变长的子字符串

时间:2015-05-20 21:16:23

标签: xml xpath

我有这些节点:

  <JConfig diffgr:id="JobSubmissionConfig1" msdata:rowOrder="0">
    <JConfigID>12314</JConfigID>
    <JConfigName>Custom_Assets15</JConfigName>
    <DataOwnerID>21873497</DataOwnerID>
    <RunAsUserID>21873497</RunAsUserID>
    <StatusChgEmailAddresses>admin@someemail.com</StatusChgEmailAddresses>
    <InputFolder>Input\JVEND_DATA_ADMIN_12314</InputFolder>
    <HistoryFolder>Processed\JVEND_DATA_ADMIN_12314</HistoryFolder>
 </JConfig>

我只对在InputFolder之后开始的"Input\"节点值感兴趣,即"JVEND_DATA_ADMIN_12314",但问题是这个值将继续改变(字符数)取决于我使用的用户ID。

我试过

   substring(//*[local-name()='InputFolder']/text(), 7, 20)

这确实适用于与字符数匹配的一些用户ID,因为文件夹名称将取决于我使用的用户ID,对于其他一些用户ID可能是"ABVEND_DATA_ADMIN_124587"

给我一​​些解决方案,让我可以在"Input\"之后捕获值,然后在我的下一个请求中使用它。

1 个答案:

答案 0 :(得分:1)

您可以使用substring-after()

substring-after(//*[local-name()='InputFolder']/text(), 'Input\')

或者,您可以将第三个参数删除到substring()

substring(//*[local-name()='InputFolder']/text(), 7)

并且它默认为字符串的结尾。

请注意,您可以将XPath简化为//InputFolder,因为

  1. 似乎没有任何名称空间,
  2. 字符串值InputFolder将产生您想要的值。