2009-11-13 27 views
0

我有这个构造来质疑我的xml文档在xaml中的绑定。如何防止XPath返回所有空比较变量?

XPath="/doc/B/lists/entry[@value=(/doc/A/selectedValue)]" 

如果路径/文件/ A /了selectedValue为空或不存在/ DOC/B /表/条目的所有节点都返回。有没有办法定义在/ doc/A/selectedValue为空或不存在的情况下什么都不应该返回?

希望有人能帮忙,

问候马丁

回答

2

从理论上讲,不将返回所有乙entires,但只有空的。当没有选定的值时,/doc/A/selectedValue返回空节点集。与字符串(@value)进行比较时,空节点集将转换为空字符串。这意味着你的表达将等于

/doc/B/lists/entry[@value=''] 

为了避免这种情况,你只需要确保/doc/A/selectedValue不为空:

/doc/B/lists/entry[/doc/A/selectedValue != '' and @value=/doc/A/selectedValue] 

注意,相似的任何XPath,/doc/A/selectedValue可以返回多个节点。更明确和防御性的是/doc/A/selectedValue[1]

+0

有几个在线测试它很好,但在我的XAML绑定它总是返回第一个路径元素的内容的值。 – martin 2009-11-13 10:09:42

+0

我发现问题是我的源代码中有一段数据废弃物。 – martin 2009-11-13 10:18:28