2017-02-02 10 views
1

У меня возникли проблемы с поиском запроса при попытке проанализировать XML-файл с помощью XDocument.Как получить правильные элементы с запросом XDocument

Что я хочу:

Дайте мне все значения «Name» Элементы Шаге с идентификатором = «id_3» Таким образом, результат должен быть список, содержащий «Имя части 1, Наименование части 2, Название части 3 Название части 4

входного XML:..

<MyXML> 
    <Step id="id_1" type="type1"> 
    <Name>Some Name</Name> 
    <Location>1</Location> 
    <Quantity>1</Quantity> 
    </Step> 
    <Step id="id_2" type="type1"> 
    <Name>>Some Name</Name> 
    <Location>2</Location> 
    <Quantity>1</Quantity> 
    </Step> 
    <Step id="id_3" type="type2"> 
    <Instruction>This is some text</Instruction> 
    <Component> 
     <Name>Name of part 1</Name> // --> I want this value 
     <Transition_Start>-0.2,0.01,0.0</Transition_Start> 
     <Transition_End>0,0.01,0.0</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 2</Name> // --> and this 
     <Transition_Start>0.2,0.01,0</Transition_Start> 
     <Transition_End>0,0.01,0</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 3</Name> // --> and this 
     <Transition_Start>0.05,0.1004,0.0333</Transition_Start> 
     <Transition_End>-0.0803,0.1004,0.0333</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 4</Name> // --> and this 
     <Transition_Start>-0.0107,0.0383,-0.2328</Transition_Start> 
     <Transition_End>-0.0107,0.0383,-0.2328</Transition_End> 
    </Component> 
    </Step> 
</MyXML> 

Я пытался что-то вроде этого (в Unity3D)

IEnumerable<XElement> e_nameOfObjects = 
       from el in myXMLDoc.Root.Elements ("Step") 
       where (string)el.Attribute ("id") == "id_" + currentStep 
       select el.Elements ("Component"); 

foreach (XElement e in e_nameOfObjects) { 
    Debug.Log (e.Element("Name")); 
} 

Сообщение об ошибке:

Не может неявно преобразовать тип System.Collections.Generic.IEnumerable> ' к System.Collections.Generic.IEnumerable. Явное преобразование существует (вы пропали без вести броска?)

+0

Пожалуйста, опишите, каким образом это не работает? Вы получаете неправильные данные, исключение, что-то еще? Пожалуйста, подробно в вопросе. – Richard

+0

«Пожалуйста, подробно укажите вопрос» (код/​​ошибки в комментариях слишком трудно читать). – Richard

+0

IEnumerable e_nameOfObjects = (от эль в myXMLDoc.Root.Elements ("Шаг"), где (строка) el.Attribute ("ID") == "id_" + currentStep выберите el.Elements ("Компонент")).К списку(); – jdweng

ответ

1

Вы можете получить все компоненты, используя метод Elements, а затем выберите Name внутри эти компоненты, как это: -

var names = myXMLDoc.Descendants("Step") 
      .Where(x => (string)x.Attribute("id") == "id_3") 
      .Elements("Component") 
      .Select(x => (string)x.Element("Name")); 

Здесь имена вернут IEnumerable<string>, на которых вы можете легко перебирать петлю foreach.

Working Fiddle.

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

  • Нет связанных вопросов^_^