2014-01-10 2 views
0

Я понял, что моя проблема читать XML-файл ниже была из-за пространства имен, и я добавил поддержку для XmlDataProvider, но я не могу заставить это работать, и я не нашел способ отладить это.XmlDataProvider чтение XML с пространством имен по умолчанию

Любой, кто может определить, где я ошибаюсь?

XAML:

<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}, [email protected]}" Value="Container"> 
           <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, [email protected]}" Value="Configuration"> 
           <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\edit.png" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, [email protected]}" 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-файла:

<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> 
+0

Вы можете попробовать для минимизации XML и XAML, чтобы ошибка все же возникала, но возможностей меньше? –

+0

Кажется, что вам не хватает XML ... это только от этого вопроса, или он отсутствует в вашем файле? * Это * вызовет проблему. Кроме того, вам, похоже, не хватает вашего объявления XML: '' – Sheridan

+0

Я заявил, что это начало XML-файла. Он правильно закрыт и т. Д., Но имеет большое значение, чтобы включить полный файл. А также это XML из внешнего продукта, поэтому я застрял в том, как он выглядит. – StefanE

ответ

0

Ваша проблема в этой строке:

<entityStoreData xmlns="http://www.vordel.com/2005/06/24/entityStore"> 

Вы должны включать .xsd:

<entityStoreData xmlns="http://www.vordel.com/2005/06/24/entityStore.xsd"> 

Настройка XML префикс пространства имен:

<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:

<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}, [email protected]}" Value="Container"> 
          <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\coffee.png" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, [email protected]}" Value="Configuration"> 
          <Setter Property="Image.Source" Value="D:\Projects\Icons\PNG\edit.png" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Source={StaticResource xmlDataProvider}, [email protected]}" 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

XML-файл генерируется из сторонней системы, но я думаю, что это не большая проблема, чтобы добавить .xsd, а затем удалить его позже .. Но ваши предложенные изменения не помогли. Есть ли способ сделать отладку, когда .net анализирует XML? – StefanE

+0

Кроме того, я не могу скомпилировать, если у меня нет параметра x: Key для XmlDataProvider – StefanE

+0

Конечно, вам нужно убедиться, что 'XmlDataProvider' установлен как' DataContext' для 'HierarchicalDataTemplate' ... Я протестировал этот код и все работает так, как ожидалось. Первоначально я объявлял 'XmlDataProvider' в' UserControl.DataContext', поэтому ему не нужно значение 'x: Key'. – Sheridan

 Смежные вопросы

  • Нет связанных вопросов^_^