当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《基于动态正则表达式的XPath搜索》经验,为你挑选了1个好方法。

我有一个类似下面的XML:

    
    
        
            
                AMA*
            

            
                AMAZON
            

                           
                EBAY
            

                           
                *
            

        
    

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

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

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

/目的地[(From ='''或From ='*')))/ @ name

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

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

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

谢谢,Manglu



1> Dimitre Nova..:

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

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

说明:

    $pPat变量包含搜索模式(如"EBAY","AMAZON"等).

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

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

测试:

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


    

    

    

    
      
    

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


    
        
            AMA*
        
        
            AMAZON
        
        
            EBAY
        
        
            *
        
    

生成所需的输出:


            AMA*
        
            AMAZON
        
            *
        

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有