2012-04-13 1 views
0

У меня есть следующие XMLLINQ к XML с префиксом пространства имен

<Location xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<Latitude>-1</Latitude> 
<Longtitude>-1</Longtitude> 
</Location> 

И без пространства имен (Xmlns: Я ...), я мог бы использовать следующий запрос

//xdoc is an XDocument loaded with the above xml 
var locCollection = from p in xdoc.Descendants("Location") 

с пространством имен но без префикса «я», я мог бы использовать следующий запрос

XNamespace ns = @"http://www.w3.org/2001/XMLSchema-instance" 
var locCollection = from p in xdoc.Descendants(ns + "Location") 

Так как я имею дело с тэ «я» префикс?

Спасибо.

ответ

0

Проблема заключается в том, что при предоставлении префикса пространства имен вам необходимо явно префикс XML-элементов, находящихся в этом пространстве имен. Поэтому в вашем примере, если вы явно указываете префикс, как в i:Location, ваши запросы будут работать.

<i:Location xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Latitude>-1</Latitude> 
    <Longtitude>-1</Longtitude> 
</i:Location> 

Причина она работала без префикса, потому что с из префикса указан пространство имен считаются пространством имен по умолчанию поэтому Location был по умолчанию области видимости пространства имен.

+0

Спасибо, Крис. Это действительно работает. Но xml, который вы видели, был ответом, который я получил от службы WCF. Я использовал что-то вроде [DataContract (Namespace = "")] public class Location {}, который по умолчанию не указывает префикс (i: location). Я знаю, что это совершенно другой вопрос, но знаете ли вы, что это решение? – user302581

+0

Вам нужно будет предоставить немного больше контекста, возможно, если вы разместите другой вопрос с образцом, который воспроизводит проблему. –