XMLファイルから、特定のタグで囲われた文字列を取得する方法ってどうやるんだろ;;
……というツイートを見かけましたので、XMLファイルをアプリ内に持っている場合と、string型のXML文字列についてご紹介します。参考になれば嬉しいかも。
XMLを読み込む前の前準備
XMLFile.xmlというXMLのデータを読み込む前提で前準備を進めましょう。ソリューションエクスプローラーにXMLFile.xmlを追加します。新規でも問題ありません。
この時、ビルドアクションは「コンテンツ」にしておきましょう。
System.Xml.Linqを使用したいので、参照の追加でSystem.Xml.Linqを追加しておいてください。
xmlの中身はこんな感じです。
<?xml version="1.0" encoding="utf-8" ?> <items> <item no="3"> <name>割りと普通</name> <name_en>normalian</name_en> </item> <item no="2"> <name>しばやん</name> <name_en>shibayan</name_en> </item> <item no="5"> <name>酢酸</name> <name_en>ch3cooh</name_en> </item> </items>
さて、XMLをロードするトリガーですが、OnNavigatedToをオーバーライドして、XMLファイルをロードする処理をここに書きましょう。
namespace XmlTest { public partial class MainPage : PhoneApplicationPage { // コンストラクター public MainPage() { InitializeComponent(); } /// <summary> /// ここでXMLファイルをロードする /// </summary> /// <param name="e"></param> protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { } } }
アプリ内のXMLコンテンツから情報を取得する
App.GetResourceStreamメソッドで
protected override void OnNavigatedTo(NavigationEventArgs e) { // アプリケーションファイル内からXMLファイルの情報を取り出す var info = App.GetResourceStream(new Uri("XMLFile.xml", UriKind.Relative)); // ストリームからXDocumentインスタンスを生成 var doc = XDocument.Load(info.Stream); // item要素の数を取得する var items = doc.Descendants("item"); int count = items.Count(); foreach (var item in items) { // item要素のno属性の値を取得する var no = item.Attribute("no").Value; // 子要素nameの値を取得する var name = item.Element("name").Value; } }
string型のXML文字列から情報を取得する
protected override void OnNavigatedTo(NavigationEventArgs e) { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><items><item no=\"3\"><name>割りと普通</name><name_en>normalian</name_en></item><item no=\"2\"><name>しばやん</name><name_en>shibayan</name_en></item><item no=\"5\"><name>酢酸</name><name_en>ch3cooh</name_en></item></items>"; // ストリームからXDocumentインスタンスを生成 var doc = XDocument.Parse(xml); var items = doc.Descendants("item"); // item要素の数を取得する int count = items.Count(); foreach (var item in items) { // item要素のno属性の値を取得する var no = item.Attribute("no").Value; // 子要素nameの値を取得する var name = item.Element("name").Value; } }