Compartir a través de


Cómo: Usar espacios de nombres XML en la vinculación de datos

Ejemplo

En este ejemplo se muestra cómo manejar los espacios de nombres especificados en el origen de enlace XML.

Si sus datos XML contienen la siguiente definición de un espacio de nombres XML:

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">

Puede usar el XmlNamespaceMapping elemento para asignar el espacio de nombres a Prefix, como en el ejemplo siguiente. A continuación, puede usar Prefix para hacer referencia al espacio de nombres XML. En ListBox este ejemplo se muestra el título y dc:date de cada elemento.

<StackPanel.Resources>
  <XmlNamespaceMappingCollection x:Key="mapping">
    <XmlNamespaceMapping Uri="http://purl.org/dc/elements/1.1/" Prefix="dc" />
  </XmlNamespaceMappingCollection>

  <XmlDataProvider Source="http://msdn.microsoft.com/subscriptions/rss.xml"
                   XmlNamespaceManager="{StaticResource mapping}"
                   XPath="rss/channel/item" x:Key="provider"/>

  <DataTemplate x:Key="dataTemplate">
    <Border BorderThickness="1" BorderBrush="Gray">
      <Grid Width="600" Height="50">
        <Grid.RowDefinitions>
          <RowDefinition Height="25"/>
          <RowDefinition Height="25"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding XPath=title}" />
        <TextBlock Grid.Row="1" Text="{Binding XPath=dc:date}" />
      </Grid>
    </Border>
  </DataTemplate>
</StackPanel.Resources>

<ListBox
  Width="600"
  Height="600"
  Background="Honeydew"
  ItemsSource="{Binding Source={StaticResource provider}}"
  ItemTemplate="{StaticResource dataTemplate}"/>

Tenga en cuenta que el Prefix que usted especifique no tiene que coincidir con el usado en el origen XML; si el prefijo cambia en el origen XML, el mapa sigue funcionando de todas maneras.

En este ejemplo concreto, los datos XML proceden de un servicio web, pero el XmlNamespaceMapping elemento también funciona con datos XML en línea o datos XML insertados en un archivo incrustado.

Consulte también