2013-10-07 3 views
0

Я ищу быстрый и эффективный способ получить 2 строки из нескольких xml-файлов.Наиболее эффективный способ чтения двух узлов из нескольких XML-файлов?

Файлы сами по себе не такие большие только от 50 кб до 100 кб, а количество файлов может варьироваться от 100 до 100. Я включил образец очень маленького XML-файла, который я буду использовать. Все файлы XML будет тот же формат и есть только две вещи, мне нужно знать, из всех файлов, а именно:

<Company>test bv.</Company> 
    <Ship>sss testing</Ship> 

я хочу, чтобы сохранить эти строки в STRUCT/классе, так как я не могу использовать кортежем .net 3.5 (или я ошибаюсь?)

так что вопрос: какой самый эффективный способ сделать это? используя Xdocument? используя xmlReader? или что-то другое?

<?xml version="1.0" encoding="utf-8"?> 
<Collection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Customer> 
    <ID>-1</ID> 
    <Updated>true</Updated> 
    <Company>test bv.</Company> 
    <Ship>sss testing</Ship> 
    <Adress>fggfgggff gvg</Adress> 
    <City>fgcgg</City> 
    <ZipCode>5454fc</ZipCode> 
    <Country>fcgggff</Country> 
    <BTW_Nmbr>55</BTW_Nmbr> 
    <IsTempCustomer>true</IsTempCustomer> 
    <PhoneNumbers> 
     <ContactData> 
     <ID>21</ID> 
     <Updated>true</Updated> 
     <Description>455656567</Description> 
     <Name>ghbbvh</Name> 
     <IsSendable>false</IsSendable> 
     </ContactData> 
     <ContactData> 
     <ID>22</ID> 
     <Updated>true</Updated> 
     <Description>2315098234146124302134</Description> 
     <Name>asdfawegaebf</Name> 
     <IsSendable>false</IsSendable> 
     </ContactData> 
    </PhoneNumbers> 
    <EmailAdresses /> 
    </Customer> 
    <Order> 
    <ID>-1</ID> 
    <Updated>true</Updated> 
    <OrderNr>10330200</OrderNr> 
    <OrderDate>1-1-2005</OrderDate> 
    <StartDate>10-9-2013</StartDate> 
    <ExpirationDate>20-10-2013</ExpirationDate> 
    <Executor>Andre de Zwart</Executor> 
    <Executors /> 
    <Reference /> 
    <OrderDetail /> 
    <IsDigital>true</IsDigital> 
    </Order> 
    <Materials> 
    <MaterialData> 
     <ID>108</ID> 
     <Updated>true</Updated> 
     <Description>ffdffggfg</Description> 
     <Amount>34</Amount> 
    </MaterialData> 
    <MaterialData> 
     <ID>109</ID> 
     <Updated>true</Updated> 
     <Description>ffccff</Description> 
     <Amount>45</Amount> 
    </MaterialData> 
    </Materials> 
    <HourExpenses> 
    <HourExpensesData> 
     <ID>43850</ID> 
     <Updated>true</Updated> 
     <Date>2013-10-06T00:00:00</Date> 
     <Notes>lala</Notes> 
     <Day>Sunday</Day> 
     <Hours>0.01</Hours> 
     <BusinessHours>0.01</BusinessHours> 
     <TravledHoursTo>0</TravledHoursTo> 
     <TravledHoursFrom>0</TravledHoursFrom> 
     <Start>2013-10-06T12:27:00</Start> 
     <Stop>2013-10-06T12:27:00</Stop> 
    </HourExpensesData> 
    <HourExpensesData> 
     <ID>43849</ID> 
     <Updated>true</Updated> 
     <Date>2013-09-17T00:00:00</Date> 
     <Notes>oke dus ik ben nu lekker aan het werk en ik typ wat spul er bij</Notes> 
     <Day>Tuesday</Day> 
     <Hours>0</Hours> 
     <BusinessHours>0.01</BusinessHours> 
     <TravledHoursTo>0</TravledHoursTo> 
     <TravledHoursFrom>0</TravledHoursFrom> 
     <Start>2013-09-17T12:31:31</Start> 
     <Stop>2013-09-17T12:31:32</Stop> 
    </HourExpensesData> 
    <HourExpensesData> 
     <ID>43855</ID> 
     <Updated>true</Updated> 
     <Date>2013-10-03T00:00:00</Date> 
     <Notes>test</Notes> 
     <Day>Thursday</Day> 
     <Hours>0</Hours> 
     <BusinessHours>0</BusinessHours> 
     <TravledHoursTo>12</TravledHoursTo> 
     <TravledHoursFrom>12</TravledHoursFrom> 
     <Start>0001-01-01T00:00:00</Start> 
     <Stop>0001-01-01T00:00:00</Stop> 
    </HourExpensesData> 
    </HourExpenses> 
    <TravelExpenses> 
    <TravelExpensesData> 
     <ID>672</ID> 
     <Updated>true</Updated> 
     <Date>2013-09-27T00:00:00</Date> 
     <Notes /> 
     <KmTo>45</KmTo> 
     <KmFrom>45</KmFrom> 
     <Declaration>0</Declaration> 
    </TravelExpensesData> 
    </TravelExpenses> 
    <Signatures> 
    <ID>-1</ID> 
    <Updated>true</Updated> 
    <OrderID>10330200</OrderID> 
    <Completed>false</Completed> 
    <Notes>yay het werkt ;D</Notes> 
    </Signatures> 
    <RemovedDataList /> 
</Collection> 

ответ

3

Я просто хотел бы использовать LINQ для XML самым простым способом:

var query = from file in files 
      let doc = XDocument.Load(file) 
      from customer in doc.Descendants("Customer") 
      select new { 
       Company = (string) customer.Element("Company"), 
       Ship = (string) customer.Element("Ship") 
      }; 

Я бы ожидать, что будет довольно быстро уже - но вы должны выяснить, что ваши точные требования к производительности являются, затем проверьте их. (Вам почти наверняка не нужен «самый эффективный» способ - вам нужен достаточно эффективный способ, сохраняя при этом код, который можно читать.)

Обратите внимание, что если вы хотите, чтобы значения распространялись из текущего метода , вы должны создать свой собственный класс для представления пары компания/судно.

+0

Вы правы @ Jon Skeet достаточно эффективный способ. Я должен признать, что я забыл о linq (не понимал, что могу использовать его для этого), что действительно круто – Vincent

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