更改XPath表达式中的元素名称

时间:2017-06-15 12:38:00

标签: c# regex xml parsing xpath

我正在寻找一种以编程方式更改任何给定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#解决这个问题时,我遇到了两个不同的解决方案,这两个解决方案都不适合我的方案:

  • XPathParser库:除了有重大错误之外,它还会强制你逐位重建XPath表达式,这有点过分而不是我真正需要的东西
  • RegEx:这可能是一种可能,但是该线程中建议的解决方案无法正确处理上面的一些XPath示例

1 个答案:

答案 0 :(得分:2)

如果您希望这在任何XPath表达式上正常工作,那么根据XPath语法解析表达式实际上没有任何替代方法。这是唯一的方法,例如,您可以确定表达式and and or or and需要转换为x:and and x:or or x:and。如果你认为无错程序是一种无法承受的奢侈品,那就太过分了。

相关问题