Cara: Mengikat ke Data XML Menggunakan Kueri XMLDataProvider dan XPath
Contoh ini menunjukkan cara mengikat data XML menggunakan XmlDataProvider.
XmlDataProviderDengan , data mendasar yang dapat diakses melalui pengikatan data di aplikasi Anda dapat berupa pohon simpul XML apa pun. Dengan kata lain, menyediakan cara mudah XmlDataProvider untuk menggunakan pohon simpul XML apa pun sebagai sumber pengikatan.
Contoh
Dalam contoh berikut, data disematkan langsung sebagai pulau data XML di dalam bagian .Resources Pulau data XML harus dibungkus dalam <x:XData>
tag dan selalu memiliki satu simpul akar, yang merupakan Inventori dalam contoh ini.
Catatan
Simpul akar data XML memiliki atribut xmlns yang mengatur namespace XML ke string kosong. Ini adalah persyaratan untuk menerapkan kueri XPath ke pulau data yang sebaris dalam halaman XAML. Dalam kasus sebaris ini, XAML, dan dengan demikian pulau data, mewarisi System.Windows namespace layanan. Karena itu, Anda perlu mengatur namespace kosong untuk menjaga kueri XPath tidak memenuhi syarat oleh System.Windows namespace, yang akan salah mengalihkan kueri.
<StackPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Cornsilk">
<StackPanel.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
<x:XData>
<Inventory xmlns="">
<Books>
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
<CDs>
<CD Stock="in" Number="3">
<Title>Classical Collection</Title>
<Summary>Classical Music</Summary>
</CD>
<CD Stock="out" Number="9">
<Title>Jazz Collection</Title>
<Summary>Jazz Music</Summary>
</CD>
</CDs>
</Inventory>
</x:XData>
</XmlDataProvider>
</StackPanel.Resources>
<TextBlock FontSize="18" FontWeight="Bold" Margin="10"
HorizontalAlignment="Center">XML Data Source Sample</TextBlock>
<ListBox
Width="400" Height="300" Background="Honeydew">
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}"
XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
</ListBox.ItemsSource>
<!--Alternatively, you can do the following. -->
<!--<ListBox Width="400" Height="300" Background="Honeydew"
ItemsSource="{Binding Source={StaticResource InventoryData},
XPath=*[@Stock\=\'out\'] | *[@Number>\=8 or @Number\=3]}">-->
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding XPath="Title"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
Seperti yang ditunjukkan dalam contoh ini, untuk membuat deklarasi pengikatan yang sama dalam sintaks atribut, Anda harus menghindari karakter khusus dengan benar. Untuk informasi selengkapnya, lihat Entitas Karakter XML dan XAML.
akan ListBox menampilkan item berikut saat contoh ini dijalankan. Ini adalah Juduldari semua elemen di bawah Buku dengan nilai Saham "keluar" atau Nilai angka 3 atau lebih besar dari atau sama dengan 8. Perhatikan bahwa tidak ada item CD yang dikembalikan karena XPath nilai yang ditetapkan pada XmlDataProvider menunjukkan bahwa hanya elemen Buku yang harus diekspos (pada dasarnya mengatur filter).
Dalam contoh ini, judul buku ditampilkan karena XPath pengikatan TextBlock di DataTemplate diatur ke "Judul". Jika Anda ingin menampilkan nilai atribut, seperti ISBN, Anda akan mengatur nilai tersebut XPath ke "@ISBN
".
Properti XPath di WPF ditangani oleh metode XmlNode.SelectNodes. Anda dapat mengubah kueri XPath untuk mendapatkan hasil yang berbeda. Berikut adalah beberapa contoh untuk XPath kueri yang terikat ListBox dari contoh sebelumnya:
XPath="Book[1]"
akan mengembalikan elemen buku pertama ("XML dalam Tindakan"). Perhatikan bahwa indeks XPath didasarkan pada 1, bukan 0.XPath="Book[@*]"
akan mengembalikan semua elemen buku dengan atribut apa pun.XPath="Book[last()-1]"
akan mengembalikan elemen buku kedua ke terakhir ("Memperkenalkan Microsoft .NET").XPath="*[position()>3]"
akan mengembalikan semua elemen buku kecuali untuk 3 pertama.
Saat Anda menjalankan kueri XPath , kueri mengembalikan XmlNode atau daftar XmlNodes. XmlNode adalah objek runtime bahasa umum (CLR), yang berarti Anda dapat menggunakan Path properti untuk mengikat properti runtime bahasa umum (CLR). Pertimbangkan contoh sebelumnya lagi. Jika contoh lainnya tetap sama dan Anda mengubah TextBlock pengikatan ke yang berikut ini, Anda akan melihat nama XmlNodes yang dikembalikan di ListBox. Dalam hal ini, nama semua simpul yang dikembalikan adalah "Buku".
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding Path="Name"/>
</TextBlock.Text>
</TextBlock>
Dalam beberapa aplikasi, menyematkan XML sebagai pulau data dalam sumber halaman XAML dapat merepotkan karena konten data yang tepat harus diketahui pada waktu kompilasi. Oleh karena itu, mendapatkan data dari file XML eksternal juga didukung, seperti dalam contoh berikut:
<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>
Jika data XML berada dalam file XML jarak jauh, Anda akan menentukan akses ke data dengan menetapkan URL yang sesuai ke Source atribut sebagai berikut:
<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>
Baca juga
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk