解析XML文档后,我得到了以下的Xresponse:
<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");
但在我的情况下,我有四个不同的名称空间。使用以下查询后,我没有得到任何结果,我得到了响应,而不是任何结果:
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(),
};
我不知道最新消息是什么。请帮忙
答案 0 :(得分:3)
由于您使用了错误的命名空间,因此未获得任何结果。所有没有前缀的元素都在名称空间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>
并且假设您要检索两个标题,以下代码应该是您要查找的结果:
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>
答案 1 :(得分:3)
这是因为您的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来简化查询代码。