XPath小写()函数
我正在使用XPATH从XML文档中选择某些节点。
用户可以插入该位置的值。 它工作正常,但如果使用不同的情况则不起作用。
我已经决定在比较之前将XML值和用户输入更改为小写可能是最好的方法。
我现在有这个作为我的选择器:
NodeIter = nav.Select("/Houses/House/location[contains(../location, '" + location_input + "')]");
我已经尝试将lower-case()
函数放在不同的位置,但它并不满意。
如何使../location
的值作为小写进行比较?
注意:在我的c#代码中使用ToLower()
将location_input设置为较低。
小写()函数仅从XPath 2.0开始支持。 如果您的环境支持此版本的标准,您可以编写:
NodeIter = nav.Select("/Houses/House/location[contains(lower-case(.), '" + location_input + "')]");
但是,你很可能会遇到XPath 1.0。 在这种情况下,您可以滥用translate()函数:
NodeIter = nav.Select("/Houses/House/location[contains(translate(., " + "'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" + location_input + "')]");
translate(../location, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
如果你可以逃脱只是AZ
lower-case
https://www.w3.org/TR/xpath-functions/#func-lower-case是XPath 2.0和XQuery 1.0的一部分,所以你需要使用XPath 2.0或XQuery 1.0实现,如XQSharp或类似如果要使用此类函数,请使用Saxon 9的.NET版本。
使用XPath 1.0,你所能做的就是NodeIter = nav.Select(string.Format("/Houses/House/location[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXZY', 'abcdefghijklmnopqrstuvwxyz'), '{0}')]", location_input));
。
请注意,严格来说,将两个字符串转换为较低(或较高)的情况并不是进行大小写比较的正确方法,因为Unicode中的小写字符到大写字符的映射不是一对一的。 原则上,在XPath 2.0中,您应该使用case-blind排序规则。 不幸的是,虽然许多XSLT 2.0和XQuery 1.0处理器允许你使用盲区整理,但是没有整理URI的标准,所以你的代码变得依赖于处理器。
只要您处理.net,就可以使用Microsoft扩展来进行不区分大小写的比较:ms:string-compare
https://msdn.microsoft.com/en-us/library/ms256114(v=vs.120).aspx
使用VS2017(NetFramework 4.6.1)并安装了XPath2 NuGet包,我遇到了同样的困境。 到目前为止,在使用XPath2函数时它对我来说很好。
上述就是C#学习教程:XPath小写()函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018146.html