首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用默认命名空间读取XML的XmlDataProvider

使用默认命名空间读取XML的XmlDataProvider
EN

Stack Overflow用户
提问于 2014-01-10 22:36:19
回答 1查看 526关注 0票数 0

我已经意识到读取下面的XML文件的问题是由于名称空间的原因,我已经在XmlDataProvider中添加了对它的支持,但是我无法让它工作,我也没有找到调试它的方法。

有谁能发现我哪里错了吗?

XAML:

代码语言:javascript
复制
    <XmlDataProvider
        x:Key="xmlDataProvider"
        XPath="/r:entityStoreData/r:metaInfo/r:exportRoots" Source="C:\tmp\Data.XML">
        <XmlDataProvider.XmlNamespaceManager>
            <XmlNamespaceMappingCollection>
                <XmlNamespaceMapping 
                   Uri="http://www.vordel.com/2005/06/24/entityStore" 
                   Prefix="r" />
            </XmlNamespaceMappingCollection>
        </XmlDataProvider.XmlNamespaceManager>
    </XmlDataProvider>

    <HierarchicalDataTemplate x:Key="DataTemp" ItemsSource="{Binding XPath=r:key}"  DataType="Key">
        <StackPanel Orientation="Horizontal" Margin="0,2">
            <Image>
                <Image.Style>
                    <Style>
                        <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Container">
                                <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Configuration">
                                <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\edit.png" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Circuit">
                                <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\chat.png" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>
            <TextBlock Text="{Binding Source={StaticResource xmlDataProvider}, XPath=r:id/@value}" Margin="5,0" />
        </StackPanel>
    </HierarchicalDataTemplate>
</Window.Resources>

<Grid>
    <TreeView Name="TV1" HorizontalAlignment="Left" Height="428" VerticalAlignment="Top" Width="1070" ItemsSource="{Binding}" ItemTemplate="{StaticResource DataTemp}"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="10,445,0,0" VerticalAlignment="Top" Width="116" Height="33" Click="Button_Click_1"/>

</Grid>

XML文件的开头:

代码语言:javascript
复制
<entityStoreData xmlns="http://www.vordel.com/2005/06/24/entityStore">
<metaInfo flags="138">
    <exportRoots>
        <key type='ESConfiguration'>
            <id field='name' value='Entity Store Configuration'/>
        </key>
        <key type='CircuitContainer'>
            <id field='name' value='Scania'/>
            <key type='CircuitContainer'>
                <id field='name' value='Integrations'/>
                <key type='CircuitContainer'>
                    <id field='name' value='SCIS502_DriverTripService'/>
                    <key type='FilterCircuit'>
                        <id field='name' value='SCPL0035_CheckADGroupMembership_SCIS502'/>
                    </key>
                </key>
            </key>
        </key>
        <key type='XPathGroup'>
            <id field='name' value='XPath Definitions'/>
            <key type='XPathAddNodeLocationGroup'>
                <id field='name' value='Add Node Locations'/>
                <key type='XPath'>
                    <id field='name' value='SOAP 1.2 Header Element'/>
                </key>
            </key>
        </key>
EN

回答 1

Stack Overflow用户

发布于 2014-01-10 23:22:14

你的问题出在这一行:

代码语言:javascript
复制
<entityStoreData xmlns="http://www.vordel.com/2005/06/24/entityStore">

您需要包含.xsd

代码语言:javascript
复制
<entityStoreData xmlns="http://www.vordel.com/2005/06/24/entityStore.xsd">

设置XML命名空间前缀:

代码语言:javascript
复制
<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml" 
    XPath="es:entityStoreData/es:metaInfo/es:exportRoots/es:key">
    <XmlDataProvider.XmlNamespaceManager>
        <XmlNamespaceMappingCollection>
            <XmlNamespaceMapping Uri="http://www.vordel.com/2005/06/24/entityStore.xsd"
                Prefix="es"/>
        </XmlNamespaceMappingCollection>
    </XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>

然后,您需要在XML元素上使用前缀:

代码语言:javascript
复制
<HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=es:key}"  DataType="key">
    <StackPanel Orientation="Horizontal" Margin="0,2">
        <Image>
            <Image.Style>
                <Style>
                    <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Container">
                            <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Configuration">
                            <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\edit.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, XPath=@type}" Value="Circuit">
                            <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\chat.png" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <TextBlock Text="{Binding XPath=es:id/@value}" Margin="5,0" />
    </StackPanel>
</HierarchicalDataTemplate>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21047003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档