另一个 .NET XPath 谓词问题
给定此 XML,我想从其
匹配“Tech”。匹配应该不区分大小写。
节点检索
节点的 XmlNodeList
;
<groups>
<group>
<id>Tech</id>
<members>
<member>johndoe</member>
<member>janedoe</member>
<member>robdoe</member>
</members>
</group>
<group>
<id>Support</id>
<members>
<member>johnfoe</member>
<member>janefoe</member>
<member>robfoe</member>
</members>
</group>
</groups>
我已经尝试过这个,期望得到“doemembers”,但它似乎没有返回任何结果。
// assume groupName='tech'
_document.SelectNodes("//groups/group[translate(id,'abcdefghijklmnopqrstuvxyz','ABCDEFGHIJKLMNOPQRSTUVXYZ')='" + groupName.ToUpper() + "']/members/member");
Given this XML, I want to retrieve a XmlNodeList
of <member>
nodes from <group>
nodes whose <id>
matches 'Tech'. The matching should be case-insensitive.
<groups>
<group>
<id>Tech</id>
<members>
<member>johndoe</member>
<member>janedoe</member>
<member>robdoe</member>
</members>
</group>
<group>
<id>Support</id>
<members>
<member>johnfoe</member>
<member>janefoe</member>
<member>robfoe</member>
</members>
</group>
</groups>
I've tried this, expecting to get the "doe members", but it doesn't seem to return any results.
// assume groupName='tech'
_document.SelectNodes("//groups/group[translate(id,'abcdefghijklmnopqrstuvxyz','ABCDEFGHIJKLMNOPQRSTUVXYZ')='" + groupName.ToUpper() + "']/members/member");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我怀疑
groupName
的值不是您想象的那样。我根据您的代码编译了这个示例,并得到了您似乎期望的结果:
我的另一个猜测(黑暗中的一击,因为它似乎对我有用!),是您遇到了当前语言(使用翻译?)或您所使用的 XML 文档的问题加载以某种方式被破坏(字节顺序标记?)。基本上,你的字符流有问题。
I suspect the value of
groupName
is not what you think it is.I compiled this example, based off your code, and I got the results you seem to be expecting:
My other guess (a stab in the dark, since it seems to work for me!), is that you are running into issues with current language (use of translate?), or the XML document you are loading is somehow broken (byte order mark?). Basically, problems with your character streams.
再说一遍,您的 XML 文档很可能不是您向我们展示的内容。通常,正确的 XPath 表达式不起作用的原因是文档定义了默认名称空间,并且表达式中使用的名称没有前缀。
此 C# 控制台应用程序:
运行时,产生预期的正确结果:
Once again, most probably your XML document is not what you've shown us. Very often the reason for what seems a correct XPath expression not to work is that the document has a default namespace defined and the names used in the expressions are non-prefixed.
This C# console application:
when run, produces the expected, correct result: