XML 读取器在使用 xmlns 属性时找不到元素



我正在使用windows phone的visual studio,当XML数据的父级中有属性时,我的XML阅读器代码不工作。

My c# code

namespace youtube_xml
{
  public partial class MainPage : PhoneApplicationPage
  {
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;
    }
    private void listBox1_Loaded(object sender, RoutedEventArgs e)
    {
        var element = XElement.Load("Authors.xml");
        var authors =
        from var in element.Descendants("feed")
        select new Authors
        {
            AuthorName = var.Attribute("scheme").Value,
        };
        listBoxAuthors.DataContext = authors;
    }
    public ImageSource GetImage(string path)
    {
        return new BitmapImage(new Uri(path, UriKind.Relative));
    } 
  }
}

工作XML数据

<?xml version='1.0' encoding='UTF-8'?>
<feed>
  <category scheme='http://schemas.google.com/g/2005#kind'/>
</feed>

非工作数据(注意:根元素"feed"中的属性"xmlns")

<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' >
  <category scheme='http://schemas.google.com/g/2005#kind'/>
</feed>

欢迎来到XML名称空间的世界!问题不在于"有一个属性",而在于它导致它下面的所有东西都在名称空间中。你不能再说.Attribute("scheme")了,因为它只在空的命名空间里找东西。名称空间是通过一个基于操作符重载的装置来使用的:

XNamespace atom = "http://www.w3.org/2005/Atom'";
// And now you can say:
.Descendants(atom + "feed")
.Attribute(atom + "scheme")

等等。将字符串赋值到XNamespace变量的能力要归功于隐式转换操作符。这里的+实际上构造了一个XName(顺便说一下,它也有一个从字符串的隐式转换-这就是为什么即使参数类型不是字符串,plain .Elements("feed")也可以工作)

提示:您可以将属性强制转换为某些类型,而不是使用.Value,例如(string)foo.Attribute(atom + "scheme")。它也适用于一堆其他类型,例如int

相关内容

  • 没有找到相关文章

最新更新