0

我正在寻找一种快速有效的方法来从多个 xml 文件中检索 2 个字符串。

他们自己的文件不是那么大,只有 50kb 到 100kb,文件的数量可以从无到 100 个不等。我已经包含了一个我将使用的非常小的 xml 文件的示例。所有 xml 文件的格式都相同,我只需要从所有文件中知道两件事:

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

我想将这些字符串存储在结构/类中,因为我不能在 .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>
4

1 回答 1

3

我会以最简单的方式使用 LINQ to 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")
            };

我希望这已经很快了 - 但你应该弄清楚你的确切性能要求是什么,然后测试它们。(您几乎可以肯定不需要“最有效”的方式——您需要一种足够有效的方式,同时保持代码的可读性。)

请注意,如果您希望将值传播到当前方法之外,您应该创建自己的类来表示公司/船舶对。

于 2013-10-07T15:14:38.617 回答