2013-04-05 2 views
0

Как часть проекта, над которым я работаю, мне нужно запросить файлы XML и найти данные на основе критериев поиска. Я пробовал некоторые примеры, используя XDocument, но моя проблема в том, что в XML-файле, который нуждается в анализе, имеется около 7 вариантов. Поэтому я не знаю имена элементов, только те атрибуты, которые может содержать файл. для каждого варианта я объединил файлы в один файл, это была моя теория, и это облегчило бы поиск. До сих пор эта теория оказалась ошибочной.Получить значения атрибутов, используя LINQ to XML с неизвестными элементами

Все будут иметь некоторые или все из списка Атрибутов. например,

<root> 
    <T1> 
     <T11 name="123"/> 
     <H05 FileType="T52" ClientID="POB" /> 
    </T1> 
    <T1> 
     <T11 name="1234"/> 
     <H05 FileType="T2" ClientID="POB" /> 
     <E1 ErrorCode="AA00" ErrorText="There was an Error" /> 
     <E1 ErrorCode="BB00" ErrorText="There was another Error" /> 
    </T1> 
</root> 

Если мне нужна коллекция поисковых запросов, можно ли искать в LINQ, используя только имена атрибутов, найденные в файле?

+0

Я действительно не знаю, о чем вы спрашиваете ... Не могли бы вы обновить свой вопрос и, например, показать желаемый результат для этого образца XLM? – MarcinJuraszek

ответ

1

Предполагая, что вы хотите найти все узлы документа, содержащие атрибут ErrorCode:

XDocument document = LoadXml(); 
IEnumerable<XElement> errorNodes = document 
    // Find all descendant nodes: 
    .Descendants() 
    // With an "ErrorCode" attribute: 
    .Where(el => el.Attribute("ErrorCode") != null); 
+0

Это выглядит так, как будто я был после. Возможность поиска по всему XML-документу для известных атрибутов. Большое спасибо, извини, если мое первоначальное объяснение было неясным – James

0

Вы должны быть в состоянии сделать что-то вроде этого.

 var xmlString = @"<root> 
     <T1> 
     <T11 name=""123\""/> 
     <H05 FileType=""T52"" ClientID=""POB"" /> 
     </T1> 
     <T1> 
     <T11 name=""1234""/> 
     <H05 FileType=""T2"" ClientID=""POB"" /> 
     <E1 ErrorCode=""AA00"" ErrorText=""There was an Error"" /> 
     <E1 ErrorCode=""BB00"" ErrorText=""There was another Error"" /> 
     </T1> 
     </root>"; 

     var xml = XDocument.Parse(xmlString); 

     var names = from x in xml.Descendants().Attributes("name") select x.Parent; 
Смежные вопросы