【问题标题】:Filter XML data from XmlDataProvider using XPath使用 XPath 过滤来自 XmlDataProvider 的 XML 数据
【发布时间】:2013-01-25 17:42:47
【问题描述】:

我有一个像这样的xml 文件:

<Organizations xmlns="">
    <Organization  Title ="dfs" Score="70">
        <Layer  Title ="lar"></Layer>
    </Organization>
    <Organization  Title ="srwrg" Score="70">
        <Layer  Title ="asdf"></Layer>
        <Layer  Title ="lfdkj"></Layer>
    </Organization>
</Organizations>

我在我的 WPF 项目中使用这个文件:(这里是一个资源)

<XmlDataProvider x:Key="myData" Source="Data\farsDataOrganization.xml" XPath="//Organizations/Organization"/>

<CollectionViewSource x:Key="MyCVS" >
        <CollectionViewSource.Source>
            <Binding Source="{StaticResource myData}"/>
        </CollectionViewSource.Source>
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="@Title" Direction="Ascending"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

我知道如何根据组织的Title 或Layer 的Title 制作过滤器:

 XmlDataProvider p = (XmlDataProvider)this.FindResource("myData");
 p.XPath = string.Format("//Organizations/Organization[Layer[contains(@Title,\"{0}\")]]", this.layerNameFilter.Text);

但是我想根据组织的Title 和Layer 的Title 过滤这些数据。有什么建议吗?如何更改我的 XPath 字符串以便我获得基于它们的过滤器?

编辑

我在TreeView 上显示这些数据:

 <TreeView Grid.Row="1" ItemsSource="{Binding Source={StaticResource MyCVS}}">
     <TreeView.Resources>
         <HierarchicalDataTemplate DataType="Organization" ItemsSource="{Binding XPath=Layer}">
             <StackPanel Orientation="Vertical" Width="340" Margin="0,0,0,5">
                 <Label Content="{Binding XPath=@Title}" FontSize="13" Margin="0,0,0,-5"></Label>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

【问题讨论】:

    标签: c# wpf xml xpath


    【解决方案1】:
    XmlDataProvider p = (XmlDataProvider)this.FindResource("myData");
    p.XPath = string.Format("//Organizations/Organization[contains(@Title,\"{0}\")]/Layer[contains(@Title,\"{1}\")]", 
                            this.orgTitleFilter.Text, 
                            this.layerNameFilter.Text);
    

    【讨论】:

    • 我在 TreeView 上显示这些数据。这样组织的节点就会被隐藏!
    • XPath 将选择作为过滤组织子级的过滤层。如果这不是您想要的,您需要更详细地描述。
    • 这样似乎只选择了图层。但是我想根据这些过滤器显示组织和层。
    • 如果您转换 XML 使其仅包含通过过滤器的结构,然后按原样应用绑定,怎么样?
    • 此方法使用动态 xpath 绑定,我认为您可能会追求:stackoverflow.com/questions/13038693/…
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多