2016-09-07 2 views
5

Я файл XML, как показано ниже:Исключение: Выражение XPath оценивается непредвиденного типа System.Xml.Linq.XAttribute

<Employees> 
    <Employee Id="ABC001"> 
    <Name>Prasad 1</Name> 
    <Mobile>9986730630</Mobile> 
    <Address Type="Perminant"> 
     <City>City1</City> 
     <Country>India</Country> 
    </Address> 
    <Address Type="Temporary"> 
     <City>City2</City> 
     <Country>India</Country> 
    </Address> 
    </Employee> 

Теперь я хочу получить все Тип Адрес х.

Я пробовал, как показано ниже, с помощью XPath, и я получаю исключение.

var xPathString = @"//Employee/Address/@Type"; 
doc.XPathSelectElements(xPathString); // doc is XDocument.Load("xml file Path") 

Исключение: Выражение XPath оценивали неожиданного типа System.Xml.Linq.XAttribute.

Есть ли проблема с моим XPath?

ответ

8

Ваш XPath прекрасно (хотя вы, возможно, захотите, чтобы это было более избирательно), но вы должны настроить, как вы оцениваете его ...

XPathSelectElement(), как следует из ее названия, следует использовать только для выбора элементов ,

XPathEvaluate() более общий и может использоваться для атрибутов. Вы можете перечислить результаты или захватить первое:

var type = ((IEnumerable<object>)doc.XPathEvaluate("//Employee/Address/@Type")) 
            .OfType<XAttribute>() 
            .Single() 
            .Value;