2010-03-22 5 views
1

Voici ma réponse XML:Comment analyser XML ayant plusieurs espaces de noms par défaut?

<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> 

Quand je suis en train de l'analyser en utilisant xELemnt et essayez d'affecter à un var comme ci-dessous:

var vnyData = from xmyResponse in xResponse.Descendants("DIDL-Lite").Elements("item") 
select new myClass 
            {strTitle = ((string)xmyResponse .Element("title")).Trim()}; 

Ce ne yeilding aucun résultat.

Merci, Subhendu

Répondre

1

Quand il y a un espace de noms par défaut dans le document, vous devez l'analyser comme si elle était un espace de noms nommé. Par exemple.

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

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

Tout ce que vous nommez la variable ns est sans importance. La clé est que partout où vous passez un nom d'élément (XName pour être précis) vous devez inclure l'espace de noms + nom. Vous remarquerez que la chaîne est convertible en XNamespace, mais vous pouvez également utiliser son constructeur.

+0

Merci, monsieur Einstein. Dans mon document, il y a plusieurs Namespace.So dans ce cas dois-je écrire: XNamespace ns = "urn: schémas-upnp-org: métadonnées-1-0/DIDL-Lite /"; XNamespace ns1 = "http://purl.org/dc/elements/1.1/"; XNamespace ns2 = "urn: schémas-upnp-org: métadonnées-1-0/upnp /"; var xDIDL = xResponse.Element (ns + ns1 + ns2 + "DIDL-Lite"); – Simsons

+0

Non, dans votre document XML, tout élément qui n'a pas de préfixe se trouve dans l'espace de noms "default" (c'est-à-dire, celui qui indique xmlns = "..." par opposition à xmlns: prefix = "...") il suffit donc de faire ns + "ElementName". Cependant, si vous référeniez un élément dans un autre espace de nom, vous auriez à faire ns1 + "ElementName" ou ns2 + "ElementName" mais jamais plus d'un espace de noms pour un nom d'élément particulier. – Josh

0

Vous utilisez votre schéma XML qui devrait être présent dans les noms des éléments auxquels vous essayez d'accéder. Découvrez XNamespace classe.

Questions connexes