使用XSLT小写函数

时间:2012-09-13 11:35:12

标签: c# xpath asp.net-4.0

我正在使用.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']

1 个答案:

答案 0 :(得分:4)

lower-case()是标准的XPath 2.0功能,仅在XSLT 2.0处理器中实现

要“按原样”运行代码,您需要一个XSLT 2.0处理器。开发了两种着名的用于.NET的XSLT 2.0处理器:

  1. Saxon 9.x for .NET(Saxon.NET)
  2. XQSharp
  3. 请注意

    可以从标准XPath 2.0函数的名称中省略名称空间前缀,因为XSLT处理器对所有未加前缀的函数名使用正确的默认名称空间。

    因此,请写下:

    lower-case(./Link)
    

    而不是:

    fn:lower-case(./Link)