Вот мой ответ 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()};

Это не дает никаких результатов.

Спасибо, Субхенду

1
Simsons 22 Мар 2010 в 10:18

2 ответа

Лучший ответ

Если в документе есть пространство имен по умолчанию, вы должны проанализировать его, как если бы это было именованное пространство имен. Например.

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

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

Как ни назови переменную ns, это неважно. Ключ в том, что где бы вы ни передавали имя элемента (точнее XName), вам нужно включить пространство имен + имя. Вы заметите, что строка может быть преобразована в XNamespace, но вы также можете использовать ее конструктор.

1
Josh 22 Мар 2010 в 10:28
Спасибо, мистер Эйнштейн. В моем документе есть несколько пространств имен. В этом случае я должен написать: XNamespace ns = "urn: schemas-upnp-org: metadata-1-0 / DIDL-Lite /"; XNamespace ns1 = "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
22 Мар 2010 в 11:04
Нет, в вашем XML-документе любой элемент, не имеющий префикса, находится в пространстве имен "по умолчанию" (то есть в том, который говорит xmlns = "..." в отличие от xmlns: prefix = "..."), поэтому вам нужно только сделать ns + "ElementName". Однако, если вы ссылаетесь на элемент в другом пространстве имен, вам нужно будет использовать ns1 + «ElementName» или ns2 + «ElementName», но не более одного пространства имен для конкретного имени элемента.
 – 
Josh
22 Мар 2010 в 17:22

Вы используете свою XML-схему, которая должна присутствовать в именах элементов, к которым вы пытаетесь получить доступ. Посетите курс XNamespace.

0
Andrew Bezzub 22 Мар 2010 в 10:30