Как анализировать 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()};

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

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


person Simsons    schedule 22.03.2010    source источник


Ответы (2)


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

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

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

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

person Josh    schedule 22.03.2010
comment
Спасибо, мистер Эйнштейн. В моем документе есть несколько пространств имен. Так что в этом случае я должен написать: 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); - person Simsons; 22.03.2010
comment
Нет, в вашем XML-документе любой элемент, у которого нет префикса, находится в пространстве имен по умолчанию (то есть тот, который говорит xmlns=... в отличие от xmlns:prefix=...), поэтому вам нужно только сделать ns +Имяэлемента. Однако, если бы вы ссылались на элемент в другом пространстве имен, вам пришлось бы использовать ns1+ElementName или ns2+ElementName, но не более одного пространства имен для конкретного имени элемента. - person Josh; 22.03.2010

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

person Andrew Bezzub    schedule 22.03.2010