【问题标题】:How do I get an XML attribute with XmlReader.Create?如何使用 XmlReader.Create 获取 XML 属性?
【发布时间】:2010-08-21 18:56:29
【问题描述】:

我正在使用 XmlReader.Create 从 RSS xml 文件中检索数据。然后我将这些数据放入 DataSet 并将其绑定到 ListView:

XmlReader xmlReader = XmlReader.Create(this.RssUrl);
XmlDataDocument xdoc = new XmlDataDocument();
xdoc.DataSet.ReadXml(xmlReader, XmlReadMode.InferSchema);

问题是我试图获取的字段之一是在一个属性中。如何从下面的“media:thumbnail”中获取“url”属性?

<item> 
  <title>Some Title</title> 
  <description>Content goes here...</description> 
  <link>http://www.mydomain.com?id=439</link> 
  <guid>453252362</guid> 
  <pubDate>Sat, 21 Aug 2010 11:00:00 GMT</pubDate> 
  <media:thumbnail url="http://www.mydomain.com/catalog/1111tn.jpg" /> 
  <media:content url="http://www.mydomain.com/catalog/1111.jpg" /> 
</item> 

我是这样绑定的,但是 media:thumbnail 显然是空的,因为我需要以某种方式获取属性:

void singleItem_DataBinding(object sender, System.EventArgs e)
{
    Label singleItem = (Label)sender;
    singleItem.Text = String.Format(@"                    
        <div class=""rlvI content"">
            <div class=""image"">
                <a href=""{0}""><img src=""{1}"" alt=""{2}""></a>
            </div>
            <p>
                <span class=""title"">{2}</span><br />
                {3}
            </p>
        </div>",
        ((singleItem.NamingContainer as RadListViewDataItem).DataItem as DataRowView)["link"],
        ((singleItem.NamingContainer as RadListViewDataItem).DataItem as DataRowView)["media:thumbnail"],
        ((singleItem.NamingContainer as RadListViewDataItem).DataItem as DataRowView)["title"],
        ((singleItem.NamingContainer as RadListViewDataItem).DataItem as DataRowView)["description"]);
}

有人可以帮忙吗?

【问题讨论】:

  • 不确定这里的问题是什么。无论如何,对于 C# 中的任何 Xml 工作,我的建议是切换到新的 Linq XElement api。他们比其他人容易得多。
  • +1 获取 jdv 的建议。 XmlReader 在您需要阅读 大量 量的 XML 时很有用,但 RSS 提要不太可能非常大。 LINQ to XML FTW。
  • +1 表示 jdv 的评论。使用 LINQ to XML!

标签: c# .net asp.net xml rss


【解决方案1】:

如何从下面的“media:thumbnail”中获取“url”属性?

您需要通读文档 (while (xmlReader.Read() {...}),直到找到带有该属性的元素。然后你可以使用ReadAttributeValue之类的方法。

在读取循环中,您可以匹配节点类型、节点名称和命名空间,以确保您拥有正确的元素。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2021-10-04
    • 2013-02-06
    • 2021-04-30
    • 1970-01-01
    • 2013-02-22
    • 2013-01-10
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多