2015-12-15 2 views
0

У меня есть следующий списокКак извлечь значение из списка строк из xml с помощью linq и xpath?

List<string> vehicles = new List<string> {"Year", "Make", "Model" }; 

И я забирающий узел <Vehicle> из огромного XML с помощью

var vehicle = xdoc.XPathSelectElements("s0:Transport/s0:Vehicles/s0:Vehicle[s0:Insured='Y']", namespaceManager).ToList(); 

Я пытаюсь получить год, марка и модель от узла автомобиля:

var vehicleList = vehicle.Where(x => vehicles.Contains(x.Name.LocalName)).ToList(); 

Но оно возвращает null значение для vehicleList. Кто-нибудь может исправить мой запрос?

Xml образец

<Transport> 
..... 
<Vehicles> 
     <Vehicle> 
     <Insured>Y</Insured> 
     <Number>1</Number> 
     <Year>1997</Year> 
     <ComprehensiveSymbol /> 
     <Make>FORD</Make> 
     <Model>F-250 HEAVY DUTY</Model> 
     <BodyStyle>PICKUP</BodyStyle> 
     <VehicleType>C</VehicleType> 
     <UseType> 
      <V4Code i:nil="true" /> 
      <SourceCode>1</SourceCode> 
      ----- 

    </Vehicle> 
</Vehicles> 

--- 
-- 
</Transport> 
+0

Можете ли вы показать пример вашего XML? Без этого невозможно помочь. –

+1

Та же проблема, что и в вашем [предыдущем вопросе] (http://stackoverflow.com/q/34272851/1987598): Пожалуйста, укажите [минимальный, ** полный ** и поддающийся проверке] (http://stackoverflow.com/ help/mcve) образца вашего входного документа XML. Не добавляйте этот документ в качестве комментария, вместо этого измените свой вопрос. –

+0

Что вы пытаетесь сделать точно? Получить все узлы, присутствующие в «транспортных средствах»? –

ответ

1

Если я правильно вас понял, то я буду делать это с LINQ-to-XML, а как это: -

XDocument xdoc = XDocument.Load("XMLFile"); 
var vehicleList = xdoc.Root.Descendants("Vehicle") 
             .Where(x => (string)x.Element("Insured") == "Y") 
             .Elements() 
             .Where(x => vehicles.Any(z => z == x.Name)); 

Это вернет IEnumerable<XElement>, который вы можете перемещаться с foreach цикла , Также, если вы хотите получить значение напрямую, вы можете спрогнозировать значение, подобное этому (в конце) - .Select(x => (string)x), которое вернет IEnumerable<string>.

+0

Его возвращающие нулевые значения :( – CuriousDev

+1

@CuriousDev - Вы уверены, что у вас нет пробелов в имени вашего XML-элемента? И да, есть ли у вас какое-либо пространство имен в вашем XML-формате? Это будет иметь огромное значение. –

+0

Я не уверен @Rahul – CuriousDev

Смежные вопросы