【发布时间】:2011-05-18 16:47:12
【问题描述】:
以下面的 XML 文档为例:
<?xml version="1.0"?>
<UrdaObject>
<Date>
<Year>2011</Year>
<Month>5</Month>
<Day>18</Day>
<Hours>8</Hours>
<Minutes>47</Minutes>
<Seconds>36</Seconds>
</Date>
<random_value>24</random_value>
</UrdaObject>
了解child::node() - Selects all child nodes of the current node 我将如何创建一个XPath(从根开始)将选择除文本、cmets 和其他非元素之外的所有子节点。例如,当使用此代码在 WPF 中创建树视图时:
// x is some XmlDocument, xmlTree is my WPF TreeView
XmlDataProvider provider = new XmlDataProvider();
provider.Document = x;
Binding binding = new Binding();
binding.Source = provider;
binding.XPath = "child::node()";
xmlTree.SetBinding(TreeView.ItemsSourceProperty, binding);
我将如何创建我的 XPath 语句,以便构建一个树视图,其中的节点一直向下并在原始文本之前停止?例如,它将生成以下视图:
UrdaObject
Date
Year
...
而不是...
UrdaObject
Date
Year
2011 (Don't want this!)
...
示例 XML 文件仅用于解释我的情况。表达式应该能够导航任何有效的 XML 文件并提取元素,但不能访问单个文本。
我们如何解决这个问题?我已将所有 child::node() 的引用切换为 child::*。但是,我没有更正我的 XAML 中的一行,即拉动child::node()。更正这条线使应用程序正常运行......让我觉得很傻。
【问题讨论】: