.NET Framework提供了兩套處理XML數據的類庫
1. 符合DOM標準的類庫:包括XmlDocument、XmlElement、XmlNode、XmlAttribute等類,這套類庫的特定是中規中矩、功能強大,但也揹負了太多XML的傳統和複雜
2. 已LINQ爲基礎的類庫:包括XDocument、XElement、XNode、XAttribute等類,這套類庫的特點是可以使用LINQ進行查詢和操作,方便快捷
xml文件內容如下:
<?xml version="1.0" encoding="utf-8" ?>
<StudentList>
<Student id="1">
<Name>Tim</Name>
</Student>
<Student id="2">
<Name>Tom</Name>
</Student>
<Student id="3">
<Name>Vina</Name>
</Student>
<Student id="4">
<Name>Emily</Name>
</Student>
</StudentList>
界面代碼如下:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="244" Width="412">
<StackPanel Background="LightBlue">
<ListView x:Name="listViewStudents" Height="130" Margin="5">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="80" DisplayMemberBinding="{Binding XPath=@id}" />
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding XPath=Name}" />
</GridView>
</ListView.View>
</ListView>
<Button Content="Load" Click="Button_Click" Height="25" Margin="5, 0" />
</StackPanel>
</Window>
其中,兩列分別綁定到XPath上
按鈕的點擊處理代碼如下:
XmlDocument doc = new XmlDocument();
doc.Load("Students.xml");
XmlDataProvider xdp = new XmlDataProvider();
xdp.Document = doc;
xdp.XPath = @"/StudentList/Student";
listViewStudents.DataContext = xdp;
listViewStudents.SetBinding(ListView.ItemsSourceProperty, new Binding());
代碼定義了一個XmlDataProvider對象,使用XmlDataProvider對象讀取一個xml文件,可以通過load方法加載一個xml,也可以通過對它的Source屬性賦一個Uri來加載一個網絡上的xml,例如:
xdp.Source = new Uri(@"d:\Students.xml")
XmlDataProvider對象的XPath屬性通過一個XPath指定了所有目標元素的路徑
運行效果如圖:
xml數據可以作爲線性數據的數據源,也可以用於展現樹形數據結構,界面代碼如下:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="244" Width="412">
<Window.Resources>
<XmlDataProvider x:Key="xdp" XPath="FileSystem/Folder">
<x:XData>
<FileSystem xmlns="">
<Folder Name="Books">
<Folder Name="Programming">
<Folder Name="Windows">
<Folder Name="WPF" />
<Folder Name="MFC" />
<Folder Name="Delphi" />
</Folder>
</Folder>
<Folder Name="Tools">
<Folder Name="Development" />
<Folder Name="Designment" />
<Folder Name="Players" />
</Folder>
</Folder>
</FileSystem>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding Source={StaticResource ResourceKey=xdp}}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding XPath=Folder}">
<TextBlock Text="{Binding XPath=@Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
運行效果如圖: