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 很好,我认为您在这里遇到了命名空间问题,您有两个选择,如果您确定不需要它,请去除 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 回答