我必须使用我正在使用DOMParser的Java代码来验证Xpath表达式。我面临的问题是,对于默认命名空间,我需要调整xpath,然后才能通过代码进行评估。对于例如如果我想使用以下xpath -
//party[@id='party1:abc']/abc:person[@id='Trader']/trade/abc:personId[@personIdScheme='urn:xyz:person-id:PEOPLESOFT']/text()
我需要将其传递给代码 -
//:party[@id='party1:abc']/abc:person[@id='Trader']/:trade/abc:personId[@personIdScheme='urn:xyz:person-id:PEOPLESOFT']/text()
所以基本上要求是在所有相关节点之前放置:
,其中默认命名空间适用。
有人可以帮助正确使用可以有效执行此转换的正则表达式吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
我知道这不是你所问的,但它可能符合你的目的:
String yourXPATH = "//party[@id='party1:abc']/abc:person[@id='Trader']/trade/abc:personId[@personIdScheme='urn:xyz:person-id:PEOPLESOFT']/text()";
String[] str = yourXPATH.slit("/");
String myStr = null;
while(int i=0; i<str.length; i++){
if(i==0){
myStr= str[i] +"/";
}else{
myStr = myStr + "/:" + str[i];
}
}
//then you can use myStr as the New Xpath
答案 2 :(得分:0)
String str = "//party[@id='party1:abc']/abc:person[@id='Trader']/trade/abc:personId[@personIdScheme='urn:xyz:person-id:PEOPLESOFT']/text()";
str = str.replaceAll("/(?=\\w.*?/)(?![^\\[/]*:)","/:");
正则表达式查找不是最后一个的/
,后跟一个单词字符。
而且它也会忽略那些在:
或[
之前已经/
的人。
答案 3 :(得分:0)
如果你需要这个来处理任何可能的XPath表达式,那么使用正则表达式的解决方案是不可能的,因为正则表达式不足以解析像XPath这样的递归语法。您将需要一个完整的XPath解析器。周围有几个,例如REX。