.NET标准库支持XPATH 3.1



我正在维护我为C#编写的公司的旧工具,并且将其转换为.NET标准2.0。它使用撒克逊人-HE处理器处理一些XPATH并替换文件中的某些配置。它的.NET上的Nuget软件包具有依赖项,不允许在所有.NET标准2.0符合条件的平台上执行执行(在我的情况下,.NET Framework和.NET Core(,因此我需要将其替换为彼此的工具,如果更好的话,如果标准.NET XPATH库。

问题在于该工具使用了一些执行复杂操作的XPath,例如连接字符串并选择一个数组项目,我不知道它是撒克逊人特定的语法或标准。

重要的是要知道这一点,因为如果XPath符合某些XPATH标准,我可以找到彼此处理相同XPath的方法。

这是一些示例:

首先:

for $row in /Item/SubItem[*]/SubSubItem return(concat($row, "/ConcatValue"))

第二:

/Item/SubItem[*]/SubSubItem/(add[@key="TheKey"]/@value/string(), '')[1]

您对此XPath语法有所了解吗?

谢谢

您给出的XPath表达式为示例需要XPATH 2.0处理器,但它们不是撒克逊人的特定。

表达式

for $row in /Item/SubItem[*]/SubSubItem return(concat($row, "/ConcatValue"))

是一个ForExpression,它特定于XPATH 2.0,并且不容易转换为XPATH 1.0,因为其结果是一系列字符串,并且XPath 1.0中没有此类数据类型。

表达式

/Item/SubItem[*]/SubSubItem/(add[@key="TheKey"]/@value/string(), '')[1]

是特定于XPath 2.0的,因为它在"/quot"的Rhs上使用括号表达式。操作员;再一次,因为它返回一系列字符串。

恐怕我无法告知您是否存在在.NET Core上运行的XPath 2.0库,我认为这是您的要求。由于IKVM的依赖性,撒克逊人无法在.NET核心上运行,该核心不支持该平台,并且(我收集(无法轻易适应。

请注意,XPath 2.0是XQUERY 1.0的子集,因此您可以将搜索扩展到XQUERY 1.0处理器以及XPath 2.0处理器。

== 2023 UPDATE ==

saxoncs 11.x,然后在.net core

上运行

多亏了此评论,我能够测试xpath2.net,现在一切都起作用。我只需要更改一种XPath定义

这个:

/Item/SubItem[*]/SubSubItem/(add[@key="TheKey"]/@value/string(), '')[1]

更改为

/Item/SubItem[*]/SubSubItem/(add[@key="TheKey"]/@value/string(.), '')[1]

请注意string()函数的其他点参数。这很奇怪,因为不应该需要点。实际上,根据标准

在该函数的零词版本中,$ arg默认为 上下文项。也就是说,调用fn:string((等效于调用 fn:string(。(

但是xpath2对此错误抱怨

{"The function 'string'/0 was not found in namespace 'http://www.w3.org/2003/11/xpath-functions'"}

更新:

将xpath2.net库更新为1.0.8 string()语法作品。

相关内容

  • 没有找到相关文章

最新更新