[WPF]名前空間付きのXMLをBind


Web APIを使用してXMLデータを取得すると名前空間付きであることが多々あると思います。
MSDNなどで掲載されているXMLデータをコントロールへBindするサンプルは名前空間が省略されていることが多いですので、名前空間付きのXMLのBind方法をメモしておこうと思います。
1.)XMLドキュメントを作成する

//XMLを読み込むStreamオブジェクトを作成する(読み込みもとURLもここで指定する)
System.IO.Stream reader = wc.OpenRead(szUrl);
//XmlDocumentを作成しStreamからXMLデータを読み込む
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(reader);

2.)名前空間の設定を行う
名前空間の指定は「XmlNamespaceMappingCollection」を使用して行います。

//XmlNamespaceMappingCollectionを作成する
XmlNamespaceMappingCollection xmlnscol = new XmlNamespaceMappingCollection();
//名前空間の設定を行う(prefix:任意のプリフィックスを指定する、namespace読み込むデータの名前空間を指定する)
xmlnscol.AddNamespace("prefix", "namespace");

3.)XmlDataProviderを作成する

//XMLDataProviderを作成する
XmlDataProvider xmldata = new XmlDataProvider();
//2.)で作成したXmlNamespaceMappingCollectionを設定する
xmldata.XmlNamespaceManager = xmlnscol;
//1.)で作成したXmlDocumentを設定する
xmldata.Document = xmldoc;
//読み込むデータのXPathを2.)で作成したプリフィックスを設定して指定する
xmldata.XPath = "prefix:DataSet";
xmldata.Refresh();

4.)コントロールのItemsSourceプロパティにXmlDataProviderをBindする

//Bindingオブジェクトを作成する
System.Windows.Data.Binding binding = new System.Windows.Data.Binding();
//Bind方法を設定する
binding.Mode = BindingMode.OneWay;
//Bindするデータを設定する
binding.Source = xmldata;
binding.XPath = "prefix:Data";
//ItemsSourceにBindingオブジェクトを設定する
listBox.SetBinding(ListBox.ItemsSourceProperty, binding);

以上で、名前空間付きのデータをBind出来ます。

0 件のコメント :

コメントを投稿