首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xelement -获取元素

Xelement -获取元素
EN

Stack Overflow用户
提问于 2014-01-07 14:29:27
回答 2查看 740关注 0票数 1

我正在将youtube上的xml提要加载到xelement中,如下所示:

代码语言:javascript
复制
  XElement element = XElement.Load(url);

这很好,我得到了一个类似于这样的文档:

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:opensearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'>
  <id>http://gdata.youtube.com/feeds/api/users/id/uploads</id>
  <updated>2014-01-07T11:43:08.269Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video'/>
  <title type='text'>Uploads by id</title>
  <logo>http://www.gstatic.com/youtube/img/logo.png</logo>
  <link rel='related' type='application/atom+xml' href='https://gdata.youtube.com/feeds/api/users/stonemarketuk'/>
  <link rel='alternate' type='text/html' href='https://www.youtube.com/channel/333/videos'/>
  <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://gdata.youtube.com/feeds/api/users/id/uploads'/>
  <link rel='http://schemas.google.com/g/2005#batch' type='application/atom+xml' href='https://gdata.youtube.com/feeds/api/users/id/uploads/batch'/>
  <link rel='self' type='application/atom+xml' href='https://gdata.youtube.com/feeds/api/users/id/uploads?start-index=1&amp;max-results=25'/>
  <link rel='next' type='application/atom+xml' href='https://gdata.youtube.com/feeds/api/users/id/uploads?start-index=26&amp;max-results=25'/>
  <author>
    <name>StonemarketUK</name>
    <uri>https://gdata.youtube.com/feeds/api/users/id</uri>
  </author>
  <generator version='2.1' uri='http://gdata.youtube.com'>YouTube data API</generator>
  <openSearch:totalResults>30</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
  <entry>
      ....entry elements
  </entry>
  <entry>
      ....entry elements
  </entry>
</feed>

如何获得输入元素?我尝试了以下几点:

代码语言:javascript
复制
var entries = element.Elements("entry");
var entries = element.Element("feed").Elements("entry");
var entries = element.Nodes().Elements("entry");

但这些都没有回报

我还调试并尝试了element.Elements().FirstOrDefault(),但这返回null。element.Nodes().Count()返回了41,所以我应该尝试获取名为entry的节点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-07 14:35:58

所有元素都位于命名空间(xmlns='http://www.w3.org/2005/Atom')中。您必须声明原子命名空间并使用它。

这很简单:

代码语言:javascript
复制
XNamespace atom = "http://www.w3.org/2005/Atom";

var xml = XElement.Load(url);
var entry = xml.Elements(atom + "entry");

等。

获得正确元素名称的一种简单方法是使用XName.Get()。如果只有一个名称空间,则可以将其放入单独的函数中:

代码语言:javascript
复制
internal static XName GetXName(string name)
{
    string atomNamespace = "http://www.w3.org/2005/Atom";
    return XName.Get(name, atomNamespace);
}
票数 6
EN

Stack Overflow用户

发布于 2014-01-07 14:35:59

尝试以下几点

代码语言:javascript
复制
var entryList = element.Elements().Where(x => x.Name.LocalName == "entry");

这里的问题是,没有显式命名空间的每个元素都隐式地存在于名称空间"http://www.w3.org/2005/Atom"中。LocalName属性仍然可以用于访问上面所示的简单名称。除非您需要构造一个适当的XName元素,该元素包含此命名空间,以便与“entry”节点匹配

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20974211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档