基于动态正则表达式的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(., '\*', '.*'))]]
说明 :
-
$pPat
变量包含搜索模式(例如’EBAY’,’AMAZON’等)。 -
标准XPath 2.0函数
matches()
用于将任何From
元素的值与字符串模式匹配。 -
任何
From
元素的值都将转换为XPath 2.0支持的标准正则表达式。 为此,任何出现的'*'
(转义为"\*"
以便不被视为正则表达式中使用的特殊字符'*'
而是作为普通字符)将被字符串".*"
替换".*"
测试 :
我使用了以下XSLT 2.0转换并validation了上面的XPath 2.0表达式按预期选择了元素。 要使用它,请将全局参数$ pPat的值替换为任何所需的值。
将此转换应用于最初提供的XML文档时 :
AMA* AMAZON EBAY *
生成所需的输出 :
AMA* AMAZON *
- 错误的值类:类org.apache.hadoop.io.Text不是类org.apache.hadoop.io.IntWritable
- 从eclipse转到vim的任何好教程?
- 字符串文字中的Informix JDBC,MONEY和小数分隔符问题
- 如何将ResultSet对象转换为一个特定的POJO类对象?
- ClassCastException:java.math.BigInteger在连接MySQL时无法强制转换为java.lang.Long
- 如何提高ThreadLocal包装的SimpleDateFormat的性能?
- 番石榴缓存并保留已检查的exception
- 按长度排序,然后按字母顺序排序
- XMLPullParser解析器无法解析“(??????)·”xml标记内部