基于动态正则表达式的XPath搜索

我有一个类似下面的XML:

    AMA*   AMAZON   EBAY   *    

我想查询并找出与提供的输入匹配的所有设计。

如果我指定EBAY我希望xpath返回节点名称= DEST3和DEST4(它不关心值)但是如果我指定AMAZON它需要返回DEST1,DEST2和DEST4作为AMA *在DEST1中支持通配符。

到目前为止,我的XPath看起来像这样:

/目的地[(From =” ‘或From =’*’))] / @ name

如果指定了input,则动态创建XPATH表达式并将传入值插入 领域

除了From之外,我的XML中还有其他元素。

感谢是否有人可以指出这一点。

谢谢,Manglu

以下XPath 2.0表达式表示所需的选择

  /*/*/*[From[matches($pPat, replace(., '\*', '.*'))]] 

说明

  1. $pPat变量包含搜索模式(例如’EBAY’,’AMAZON’等)。

  2. 标准XPath 2.0函数matches()用于将任何From元素的值与字符串模式匹配。

  3. 任何From元素的值都将转换为XPath 2.0支持的标准正则表达式。 为此,任何出现的'*' (转义为"\*"以便不被视为正则表达式中使用的特殊字符'*'而是作为普通字符)将被字符串".*"替换".*"

测试

我使用了以下XSLT 2.0转换并validation了上面的XPath 2.0表达式按预期选择了元素。 要使用它,请将全局参数$ pPat的值替换为任何所需的值。

         

将此转换应用于最初提供的XML文档时

    AMA*   AMAZON   EBAY   *    

生成所需的输出

  AMA*  AMAZON  *