C# XPath小写()函数
我使用XPATH从XML文档中选择某些节点 用户可以插入位置的值。它工作得很好,但是如果使用不同的情况,它就不起作用了 我认为在比较之前将XML值和用户输入的大小写都更改为小写可能是最好的方法 我现在选择这个:C# XPath小写()函数,c#,xml,xpath,selector,C#,Xml,Xpath,Selector,我使用XPATH从XML文档中选择某些节点 用户可以插入位置的值。它工作得很好,但是如果使用不同的情况,它就不起作用了 我认为在比较之前将XML值和用户输入的大小写都更改为小写可能是最好的方法 我现在选择这个: NodeIter = nav.Select("/Houses/House/location[contains(../location, '" + location_input + "')]"); 我尝试过将小写函数放在不同的位置,但它不满意 如何使../location的值作为小写进行
NodeIter = nav.Select("/Houses/House/location[contains(../location, '" + location_input + "')]");
我尝试过将小写函数放在不同的位置,但它不满意
如何使../location的值作为小写进行比较
注意:在我的c代码中,位置_输入被设置为使用下限。translate../location'ABCDEFGHIJKLMNOPQRSTUVWXYZ',“abcdefghijklmnopqrstuvwxyz”如果您只需要A-Z就可以了,小写是XPath 2.0和XQuery 1.0的一部分,因此如果您想使用这些函数,您需要使用XPath 2.0或XQuery 1.0实现,比如XQSharp或.NET版本的Saxon 9
使用XPath 1.0,您所能做的就是NodeIter=nav.Selectstring.Format/Houses/House/location[containstranlate.,'abcdefghijklmnopqrstuvxzy','abcdefghijklmnopqrstuvxyz','{0}',location\u input 只有XPath 2.0以后才支持该函数。如果您的环境支持此版本的标准,则可以编写:
NodeIter = nav.Select("/Houses/House/location[contains(lower-case(.), '"
+ location_input + "')]");
然而,您很可能被XPath1.0所困扰。在这种情况下,您可以滥用该功能:
NodeIter = nav.Select("/Houses/House/location[contains(translate(., "
+ "'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '"
+ location_input + "')]");
请注意,严格来说,将两个字符串转换为小写或大写并不是进行大小写盲比较的正确方法,因为Unicode中小写字符到大写字符的映射不是一对一的。原则上,在XPath2.0中,应该使用不区分大小写的排序规则。不幸的是,尽管许多XSLT 2.0和XQuery 1.0处理器允许您使用大小写盲排序,但没有排序URI的标准,因此代码依赖于处理器 只要处理.net,就可以使用Microsoft扩展进行不区分大小写的比较:ms:string compare
我在使用VS2017NetFramework4.6.1时遇到了同样的难题,并安装了XPath2 NuGet包。到目前为止,我在使用XPath2函数时,它工作得很好。你说它不满意是什么意思?