下午好,
我有3个以下正则表达式,需要将它们组合成一个:
//*[local-name()!="shipping-methoc"][*[local-name()="online-flag"]="true"]/*[local-name()!="description"]
//*[local-name()!="shipping-methoc"][*[local-name()="online-flag"]="true"]/*[local-name()!="title"]
//*[local-name()!="shipping-methoc"][*[local-name()="online-flag"]="true"]/*[local-name()!="flag"]
我该怎么做? 祝一切顺利 Wojciech
答案 0 :(得分:0)
一些想法:
//
开始XPath表达式意味着引擎将搜索文档中的每个元素。这效率极低。您显然已经意识到,这三行具有几乎相同的XPath表达式,唯一的不同是最后的条件。只需对示例代码进行最少的更改,我们便可以将这三个不同的最后条件组合为一个表达式。即使在XSLT 1中也应如此。
//*[local-name()!='shipping-methoc'][*[local-name()='online-flag']='true']/*[local-name()!='description' and local-name()!='title' and local-name()!='flag']
如果您可以使用XSLT 2或更高版本,则可以使用正向和负向匹配的其他选项。
根据您对local-name()
的使用,我猜测您并不关心名称空间前缀。对于正匹配,可以将*:
用作“任何名称空间”的前缀。
//*[local-name()!='shipping-methoc'][*:online-flag='true']/*[local-name()!='description' and local-name()!='title' and local-name()!='flag']
您还可以将except
关键字用作否定匹配的附加选项。
//(* except *:shipping-methoc)[*:online-flag='true']/(* except (*:description | *:title | *:flag))