使用 XElement 解析 xml

问题描述 投票:0回答:3

我有这个

XElement

<item>
  <guid isPermaLink="false">http://gdata.youtube.com/feeds/api/videos/s1tAYmMjLdY</guid>
  <pubDate>Wed, 17 Jun 2009 05:23:10 +0000</pubDate>
  <atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2013-01-29T11:28:32.000Z</atom:updated>
  <app:control xmlns:app="http://purl.org/atom/app#">
    <yt:state name="restricted" reasonCode="limitedSyndication" xmlns:yt="http://gdata.youtube.com/schemas/2007">Syndication of this video was restricted.</yt:state>
  </app:control>
  <category domain="http://schemas.google.com/g/2005#kind">http://gdata.youtube.com/schemas/2007#video</category>
  <category domain="http://gdata.youtube.com/schemas/2007/categories.cat">Music</category>
  <title>blink-182 - I Miss You</title>
  <description>Music video by blink-182 performing I Miss You. (C) 2003 Geffen Records</description>
  <link>http://www.youtube.com/watch?v=s1tAYmMjLdY&amp;feature=youtube_gdata</link>
  <author>blink182VEVO</author>
  <gd:comments xmlns:gd="http://schemas.google.com/g/2005">
    <gd:feedLink rel="http://gdata.youtube.com/schemas/2007#comments" href="http://gdata.youtube.com/feeds/api/videos/s1tAYmMjLdY/comments" countHint="46136" />
  </gd:comments>
  <media:group xmlns:media="http://search.yahoo.com/mrss/">
    <media:category label="Music" scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Music</media:category>
    <media:content url="http://www.youtube.com/v/s1tAYmMjLdY?version=3&amp;f=videos&amp;app=youtube_gdata" type="application/x-shockwave-flash" medium="video" isDefault="true" expression="full" duration="230" yt:format="5" xmlns:yt="http://gdata.youtube.com/schemas/2007" />
    <media:description type="plain">Music video by blink-182 performing I Miss You. (C) 2003 Geffen Records</media:description>
    <media:keywords />
    <media:player url="http://www.youtube.com/watch?v=s1tAYmMjLdY&amp;feature=youtube_gdata_player" />
    <media:restriction type="country" relationship="deny">DE</media:restriction>
    <media:thumbnail url="http://i.ytimg.com/vi/s1tAYmMjLdY/0.jpg" height="360" width="480" time="00:01:55" />
    <media:thumbnail url="http://i.ytimg.com/vi/s1tAYmMjLdY/1.jpg" height="90" width="120" time="00:00:57.500" />
    <media:thumbnail url="http://i.ytimg.com/vi/s1tAYmMjLdY/2.jpg" height="90" width="120" time="00:01:55" />
    <media:thumbnail url="http://i.ytimg.com/vi/s1tAYmMjLdY/3.jpg" height="90" width="120" time="00:02:52.500" />
    <media:title type="plain">blink-182 - I Miss You</media:title>
    <yt:duration seconds="230" xmlns:yt="http://gdata.youtube.com/schemas/2007" />
  </media:group>
  <gd:rating average="4.93231" max="5" min="1" numRaters="154927" rel="http://schemas.google.com/g/2005#overall" xmlns:gd="http://schemas.google.com/g/2005" />
  <yt:statistics favoriteCount="0" viewCount="47338118" xmlns:yt="http://gdata.youtube.com/schemas/2007" />
</item>

我想得到

media:group

XElement mediaGroup = element.Element("media:group");

但是我得到这个错误:

The ':' character, hexadecimal value 0x3A, cannot be included in a name.

我该如何解决?

c# windows-phone-7 linq-to-xml xelement
3个回答
2
投票

您需要单独指定命名空间——您不能直接从字符串转换为非本地

XName
。 LINQ to XML 使用从
string
XNamespace
的隐式转换,然后使用重载的
+
运算符从 XName
 创建 
XNamespace + string
 使这变得容易。

例如:

XNamespace media = "http://search.yahoo.com/mrss/"; XElement mediaGroup = element.Element(media + "group");

(您可以按照 Cédric 的回答使用

XName.Get

,但由于您可能会在多个位置使用相同的命名空间,所以我更喜欢这样拆分。)


0
投票

:

 将元素名称拆分为前缀(命名空间的前缀,此处为:
http://search.yahoo.com/mrss/
)和本地名称。

使用:

XName.Get("group", "http://search.yahoo.com/mrss/")

代替。

string mediaNamespace = "http://search.yahoo.com/mrss/"; XElement mediaGroup = element.Element(XName.Get("group", mediaNamespace));
    

0
投票
在这里,只需将命名空间添加到 xml 文档并将变量添加到您的元素

XNamespace rss = "http://www.w3.org/2005/Atom"; XDocument feedXml = new( new XElement("rss", new XAttribute(XNamespace.Xmlns + "atom", rss), new XAttribute("Version", "2.0") ));
这将是输出:

<rss xmlns:atom="http://www.w3.org/2005/Atom" Version="2.0"> <channel> <atom:link href="http://localhost:25291/news-and-articles?rss=Regulatory-Focus" rel="self" type="application/rss+xml"/>
    
© www.soinside.com 2019 - 2024. All rights reserved.