我正在使用.net 4.0
如何重写以下xpath,才能有效
//Menu[fn:lower-case(./Link) = 'xyxysyx']
我收到此错误:
需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。
我不知道如何使用 XmlNamespaceManager 解决此问题我需要添加哪个命名空间...
如果我这样做,它可以工作:
//Menu[./Link = 'xyxysyx']
但我需要将它作为小写比较。
以下是组合它的上下文:
IEnumerable<System.Xml.Linq.XElement> menus = xml.Root.XPathSelectElements(xpath, namespaceManager);
请注意,我们可以传递给XPathSelectElements secon参数,即XmlNamespaceManager
修改 这是翻译功能的工作示例:
//Menu[translate(./Link, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'yz']
答案 0 :(得分:4)
lower-case()
是标准的XPath 2.0功能,仅在XSLT 2.0处理器中实现。
要“按原样”运行代码,您需要一个XSLT 2.0处理器。开发了两种着名的用于.NET的XSLT 2.0处理器:
请注意:
可以从标准XPath 2.0函数的名称中省略名称空间前缀,因为XSLT处理器对所有未加前缀的函数名使用正确的默认名称空间。
因此,请写下:
lower-case(./Link)
而不是:
fn:lower-case(./Link)