我正在寻找一种以编程方式更改任何给定XPath 1.0表达式的方法,使得表达式中尚未加前缀的元素名称必须以预定义字符串为前缀。
以下是一些示例(将bk
视为预定义的前缀):
book
必须变为bk:book
/bookstore/book/title
必须变为/bk:bookstore/bk:book/bk:title
//book/title/text()
必须变为//bk:book/bk:title/text()
/x:bookstore/book/
必须变为/x:bookstore/bk:book/
/bookstore/book[price>35.00]
必须变为/bk:bookstore/bk:book[bk:price>35.00]
child::para[attribute::type='warning'][position()=5]
必须变为child::bk:para[attribute::type='warning'][position()=5]
只有元素名称应该受到影响,表达式的其余部分(函数,运算符,值等)应该保持不变 - 或者,如果它们确实发生了变化,它们应该保持等效。
我怎样才能做到这一点?
在尝试用C#解决这个问题时,我遇到了两个不同的解决方案,这两个解决方案都不适合我的方案:
答案 0 :(得分:2)
如果您希望这在任何XPath表达式上正常工作,那么根据XPath语法解析表达式实际上没有任何替代方法。这是唯一的方法,例如,您可以确定表达式and and or or and
需要转换为x:and and x:or or x:and
。如果你认为无错程序是一种无法承受的奢侈品,那就太过分了。