3

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"); 

しかし、私の場合、4つの異なる名前空間があります。次のクエリを使用した後、結果が得られません。応答が得られます。結果が得られません。

   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(),
};

何が起こっているのか、私にはわかりません。助けてください

4

2 に答える 2

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(),
};

このような場合、クエリコードを単純化するために必要なXNameのセットを保持するプライベートクラスを自分で作成する傾向があります。

于 2010-03-22T10:14:46.737 に答える
3

間違った名前空間を使用しているため、結果が得られません。プレフィックスのないすべての要素は名前空間にありますurn:schemas-upnp-org:metadata-1-0/DIDL-Lite/

名前空間内のアイテムは、xmlドキュメントでhttp://purl.org/dc/elements/1.1/接頭辞が付けられます。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>
于 2010-03-22T10:13:58.827 に答える