2016-09-07 37 views
5

Mam plik XML jak poniżej:Wyjątek: Wyrażenie XPath oceniano nieoczekiwanego typu 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> 

Teraz chcę uzyskać wszystkie typ adresu jest.

Próbowałem jak poniżej przy użyciu XPath i otrzymuję wyjątek.

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

Wyjątek: Ekspresja XPath oceniano nieoczekiwanego typu System.Xml.Linq.XAttribute.

Czy jest jakiś problem z moim XPath?

Odpowiedz

8

Twój XPath jest w porządku (choć może ma to być bardziej selektywne), ale trzeba się dostosować, jak go oceniać ...

XPathSelectElement(), jak sama nazwa wskazuje, powinien być używany tylko do wybranych elementów .

XPathEvaluate() jest bardziej ogólna i może być używana do atrybutów. Możesz wyliczyć wyniki lub pobrać pierwszą:

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