0

こんにちは、icalander によって開発された奇妙な xml ドキュメントからいくつかの xml を解析しようとしています。データの解析だけでも結構苦労しましたが、stackoverflowの方々のおかげで無事に解析できました。ここで、ノード間の解析に助けが必要です。これは、私が解析しているxmlファイルへのリンクです( http://datastore.unm.edu/events/events.xml )

Visual Studio 2010 の pivotapp モデルを使用して、このアプリを作成しています。MainViewModel.cs セクションで、タグが "LineOne" の代わりに出力されることを期待して、次のコードを変更しています (以下にリストされているコード)。たとえば、上記の xml ファイルから、LineOne = Lobo's Got Talent が必要です。

これを実現するための最善の方法を見つける手助けが必要です。日付と時刻を含む LineTwo と、説明を含む LineThree が必要です。

お時間を割いてご協力いただき、ありがとうございました。

    public void LoadData()
    {
        var webClient = new WebClient();
        webClient.OpenReadAsync(new Uri("http://datastore.unm.edu/events/events.xml"));
        webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    }

    public void webClient_OpenReadCompleted(object sender, 
                                            OpenReadCompletedEventArgs e)
    {
        XDocument unmXdoc = XDocument.Load(e.Result, LoadOptions.None);
        this.Items.Add(new ItemViewModel() { LineOne = unmXdoc.ToString(), 
                                             LineTwo = "", LineThree = "" });
    }

ご覧いただきありがとうございます。

4

1 に答える 1

0

xml は問題ありません。ここで名前空間の問題が発生していると思います。2 つのオプションがあります。xml ファイルの名前空間が不要であることが確実な場合は削除します。推奨されるオプションは、名前空間を操作し、それを完全修飾要素名に指定することです。こちらをご覧ください

 private readonly XNamespace dataNamspace = "urn:ietf:params:xml:ns:icalendar-2.0";

    public void webClient_OpenReadCompleted(object sender,
                                            OpenReadCompletedEventArgs e)
    {
        XDocument unmXdoc = XDocument.Load(e.Result, LoadOptions.None);

        this.Items = from p in unmXdoc.Descendants(dataNamspace + "vevent").Elements(dataNamspace + "properties")
                     select new ItemViewModel
            {
                LineOne = this.GetElementValue(p, "summary"),
                LineTwo = this.GetElementValue(p, "description"),
                LineThree = this.GetElementValue(p, "categories"),
            };

        lstData.ItemsSource = this.Items;
    }

    private string GetElementValue(XElement element, string fieldName)
    {
        var childElement = element.Element(dataNamspace + fieldName);

        return childElement != null ? childElement.Value : String.Empty;
    }
于 2013-11-04T10:32:38.907 に答える