2010-03-22 7 views
1

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

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

Спасибо, Subhendu

ответ

1

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

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

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

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

+0

Спасибо, г-н Эйнштейн. В моем документе есть несколько пространств имен. Поэтому в этом случае мне нужно написать: XNamespace ns = "urn: schemas-upnp-org: metadata-1-0/DIDL-Lite /"; XNamespace ns1 = "http://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

+0

Нет, в вашем документе XML любой элемент, который не имеет префикса, находится в пространстве имен по умолчанию (то есть в том, что говорит xmlns = "..." в противоположность xmlns: prefix = "...") поэтому вам нужно только ns + «ElementName». Однако, если вы ссылались на элемент в другом пространстве имен, вам нужно было бы сделать ns1 + «ElementName» или ns2 + «ElementName», но не более одного пространства имен для определенного имени элемента. – Josh

0

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