如何解析具有多个命名空间的XML(使用XELement)?
问题描述:
我得到的followinng Xresponse解析XML文档后:如何解析具有多个命名空间的XML(使用XELement)?
<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/"
xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/">
<item id="1182" parentID="40" restricted="1">
<title>Hot Issue</title>
</item>
按照前面的线程,当有文件在默认的命名空间,您必须分析它,仿佛它是一个已命名空间。例如。
XNamespace ns = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/";
var xDIDL = xResponse.Element(ns + "DIDL-Lite");
但在我的情况下,我有四个不同的名称空间。我使用下面的查询后,我没有得到任何结果,我得到的反应,而不是Yeilding任何结果:
XNamespace dc = "http://purl.org/dc/elements/1.1/";
var vAudioData = from xAudioinfo in xResponse.Descendants(ns + "DIDL-lite").Elements("item")
select new RMSMedia
{
strAudioTitle = ((string)xAudioinfo.Element(dc + "title")).Trim(),
};
我不知道怎么回事因为是新来的吧。请帮助
答
这是因为您的item
元素位于您的“ns”命名空间中。使用: -
XNamespace dc = "http://purl.org/dc/elements/1.1/";
XName didl = ns + "DIDL-lite";
XName item = ns + "item";
XName title = dc + "title";
var vAudioData = from xAudioinfo in xResponse.Descendants(didl).Elements(item)
select new RMSMedia
{
strAudioTitle = ((string)xAudioinfo.Element(title)).Trim(),
};
在这些情况下,我倾向于创建一个私人类来容纳我需要简化查询代码的XNames集合。
答
由于您使用了错误的名称空间,因此没有得到任何结果。所有没有前缀的元素都在命名空间urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/
中。
命名空间http://purl.org/dc/elements/1.1/
中的项目前缀为xml文档中的dc:
。该片段不显示任何项目,所以它很难告诉你正在寻找什么元素。
例如 - 给出下面的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/"
xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/">
<item id="1182" parentID="40" restricted="1">
<title>Hot Issue</title>
<dc:title>Purl Title</dc:title>
</item>
</DIDL-Lite>
而且还考虑到要同时检索标题下面的代码应该yiedl结果您正在寻找的假设:
XNamespace dc= "http://purl.org/dc/elements/1.1/";
XNamespace ns = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/";
var result = xAudioinfo.Descendants(ns + "title"); // <title></title>
var result2 = xAudioinfo.Descendants(dc + "title"); // <dc:title></dc:title>
谢谢Ton Obaliz和Anthony的专家建议。 Itz现在工作 – Simsons