使用XPath从xml正确绑定注释节点

时间:2013-09-27 12:09:18

标签: wpf xaml xpath

所以我有一个绑定到动态加载的xml文件的树视图。

然后,在另一个面板中,我有一个绑定到TreeViewItems的列表视图。

行为是当用户点击树中的某个项目时,所有属性或文本都会显示在ListView中。

给出以下xml

<Root>
  <Child Name="Attribute">
    <!--Comment-->
    <Content>Some text</Content>
  </Child>
</Root>

我在树上得到了这个,这正是我想要的。

enter image description here

这是我用来将TreeViewItems绑定到ListView

的绑定
<Binding XPath="@*|text()|comment()" />

这可以按预期工作,但不是我想要的:)。

它将注释呈现为其父项的属性,因此,如果单击树节点Child,我将同时看到ContentComment

enter image description here

但是,如果我单击树中的Comment节点本身,我什么也得不到

enter image description here

这不是我想要的。我更喜欢如果单击Child节点,我只获取属性和文本 - 而不是commnets,但是如果我单击Comment节点,那么我应该在ListView中显示注释的值

我很确定秘密在于xPath技巧,但我无法做到正确。

将绑定更改为

<Binding XPath="@*|text()|//comment()" />

将Comment的值添加到Comment节点(好),但也添加到树中的每个其他节点(坏)。我试过在绑定上投入一些not()条件,但无济于事。

将绑定更改为

<Binding XPath="@*|text()|../comment()" />

接近,因为它然后将注释正确地绑定到注释节点,但同时也包含该注释的节点的任何其他子节点。

我需要(我认为)是将此更改为

的某种方式
<Binding XPath="@*|text()|../comment()[not(NodeType != Comment)]" />

也就是说,只选择此注释,当前上下文节点是注释。 但这个例子失败了。

此时我只是随意尝试,所以我觉得是时候问了:)

有人可以建议一个能够完成我所拥有的(希望充分)描述的绑定吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

<Binding XPath="@*|text()|self::comment()" />