2010-03-22 83 views
1

这里是我的XML响应:如何解析具有多个默认命名空间的XML?

<DIDL-Lite 
xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" 
<item id="1182" parentID="40" restricted="1"> 
<title>Hot Issue</title> 
</item> 
</DIDL-Lite> 

当我尝试使用xELemnt分析它,并尝试像下面分配给一个变种:

var vnyData = from xmyResponse in xResponse.Descendants("DIDL-Lite").Elements("item") 
select new myClass 
            {strTitle = ((string)xmyResponse .Element("title")).Trim()}; 

这不yeilding任何结果。

感谢, Subhendu

回答

1

当有文件在默认的命名空间,则必须就好像它是一个名为命名空间解析它。例如。

XNamespace ns = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"; 

var xDIDL = xResponse.Element(ns + "DIDL-Lite"); 

无论你命名ns变量是不重要的。关键在于,无论您传递元素名称的哪个位置(XName都是精确的),都需要包含名称空间+名称。你会注意到字符串可以转换为XNamespace,但是你也可以使用它的构造函数。

+0

谢谢爱因斯坦先生。在我的文档中有多个命名空间。所以在这种情况下,我必须写: XNamespace ns =“urn:schemas-upnp-org:metadata-1-0/DIDL-Lite /”; XNamespace ns1 =“http://purl.org/dc/elements/1.1/”; XNamespace ns2 =“urn:schemas-upnp-org:metadata-1-0/upnp /”; var xDIDL = xResponse.Element(ns + ns1 + ns2 +“DIDL-Lite”); – Simsons 2010-03-22 08:04:02

+0

不,在你的XML文档中,任何没有前缀的元素都在“默认”命名空间中(也就是说,与xmlns:prefix =“...”相对的是xmlns =“...”)。所以你只需要做ns +“ElementName”。但是,如果您在另一个命名空间中引用元素,则必须对特定元素名称执行ns1 +“元素名称”或ns2 +“元素名称”,但不能多于一个名称空间。 – Josh 2010-03-22 14:22:12

0

您正在使用您的xml架构,它应该出现在您尝试访问的元素的名称中。查看XNamespace课程。