C#读取并解析目录目录中的所有xml文件,并写入Signle CSV文件

时间:2019-02-27 14:57:18

标签: c# xml csv parsing

对于目录中的许多xml文件,我具有相同的结构。

我想编写一个包含所需元素的csv文件。

我是这个世界的新手,请你能帮我吗?我需要递归方法吗?
我需要阅读而不是全部

<DatiBeniServizi> // Descendants
        <DettaglioLinee>
            <NumeroLinea>1</NumeroLinea>
            <CodiceArticolo>
                <CodiceTipo>AswArtFor</CodiceTipo> // <- i dont need this
                <CodiceValore>312</CodiceValore> // <- i need only this
            </CodiceArticolo>
            <Descrizione>DELL LATITUDE E6440  CORE I5 4300 2.7 GHZ  8 GB RAM HD 320 DVD WIN 10 PRO GARANZIA 6 MESI</Descrizione>
            <Quantita>5.00000000</Quantita>
            <UnitaMisura>NR</UnitaMisura>
            <PrezzoUnitario>180.00000000</PrezzoUnitario>
            <PrezzoTotale>900.00000000</PrezzoTotale>
            <AliquotaIVA>0.00</AliquotaIVA>
            <Natura>N6</Natura>
        </DettaglioLinee>
        <DettaglioLinee>
            <NumeroLinea>2</NumeroLinea>
            <CodiceArticolo>
                <CodiceTipo>AswArtFor</CodiceTipo> // <- i dont need this
                <CodiceValore>499</CodiceValore> // <- i need only this
            </CodiceArticolo>
            <Descrizione>DELL OPTIPLEX 7010 TOWER i7-3770 3.40 GHz HD 250 GB RAM 4 GB GARANZIA  6 MESI</Descrizione>
            <Quantita>3.00000000</Quantita>
            <UnitaMisura>NR</UnitaMisura>
            <PrezzoUnitario>160.00000000</PrezzoUnitario>
            <PrezzoTotale>480.00000000</PrezzoTotale>
            <AliquotaIVA>22.00</AliquotaIVA>
        </DettaglioLinee>

我正在使用此代码,但我看不到孩子

        var results = xDocument.Descendants("DatiBeniServizi").Select(x => new {
         Codice = (string)x.Element("CodiceValore"), 
         Descrizione = (string)x.Element("Descrizione"),
         Quantita = (string)x.Element("Quantita"),
         PrezzoUnitario = (string)x.Element("PrezzoUnitario"),
         AliquotaIVA = (string)x.Element("AliquotaIVA")
     }).ToList();

     for (int i = 0; i < results.Count; i++)
     {
         string tempCodice = results[i].Codice;
         string tempDescrizione = results[i].Descrizione;
         string tempQuantita =results[i].Quantita;
         string tempprezzoUnitario = results[i].PrezzoUnitario;
         string tempAliquotaIVA = results[i].AliquotaIVA;

         dataToBeWritten.Append(tempCodice);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(tempDescrizione);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(tempQuantita);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(tempprezzoUnitario);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(tempAliquotaIVA);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(0);
         dataToBeWritten.Append(";");
         dataToBeWritten.Append(0);
         dataToBeWritten.Append(Environment.NewLine);
     }


     Console.WriteLine(dataToBeWritten.ToString());
     Console.ReadLine();

     var testpath = AppDomain.CurrentDomain.BaseDirectory + @"\test.csv";

     File.WriteAllText(testpath, dataToBeWritten.ToString());

“ Codice =(string)x.Element(” CodiceValore“),” // <-我无法阅读,我只能阅读

2 个答案:

答案 0 :(得分:1)

这是另一种方法,但是我不知道如何使用,我知道这是荒谬的。

public function authenticateEmployee(array $data){

 $email = $data['email'];
 $password = $data['password'];

 $user = User::where('email', '=', $email)->first();   //get db User data   
 if(Hash::check($password, $user->password)) {   

      return response()->json(['status'=>'false','message'=>'passwor is correct']);

    } else {
        return 'false';
    }

}

答案 1 :(得分:0)

您可以使用System.Xml.XPath.Extensions中的方法执行此操作。

例如,如果要选择单个元素,则可以使用XPathSelectElement():

var element = xDocument.XPathSelectElement("/DatiBeniServizi/DettaglioLinee/CodiceArticolo/CodiceValore");

或使用您的方法-您需要设置完整路径

var results = xDocument.Descendants("DatiBeniServizi").Select(x => new {
    Codice = (string)x.Elements("DettaglioLinee").Elements("CodiceArticolo").Elements("CodiceValore").FirstOrDefault()?.Value,
    Descrizione = (string)x.Elements("DettaglioLinee").Elements("Descrizione").FirstOrDefault()?.Value,
    Quantita = (string)x.Elements("DettaglioLinee").Elements("Quantita").FirstOrDefault()?.Value,
    PrezzoUnitario = (string)x.Elements("DettaglioLinee").Elements("PrezzoUnitario").FirstOrDefault()?.Value,
    AliquotaIVA = (string)x.Elements("DettaglioLinee").Elements("AliquotaIVA").FirstOrDefault()?.Value
}).ToList();