2010-03-22 84 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 2010-03-22 08:04:02

+0

不,在你的XML文檔中,任何沒有前綴的元素都在「默認」命名空間中(也就是說,與xmlns:prefix =「...」相對的是xmlns =「...」)。所以你只需要做ns +「ElementName」。但是,如果您在另一個命名空間中引用元素,則必須對特定元素名稱執行ns1 +「元素名稱」或ns2 +「元素名稱」,但不能多於一個名稱空間。 – Josh 2010-03-22 14:22:12

0

您正在使用您的xml架構,它應該出現在您嘗試訪問的元素的名稱中。查看XNamespace課程。