Salve, ho un'apparecchiatura elettrica che mi produce un file xml con tutti i risultati delle prove effettuate. Questo file vorrei innanzi tutto leggerlo, (poi il passo successivo sarà creare un pdf di report ed eventualmente memorizzare i dati in db).
Ho provato le funzioni classiche per poter leggere il file ma non essendo perfettamente formattato va in errore.
Riporto il file xml :
Il file e' formato da due parti: la prima e' il template e la seconda parte è formata dai risultati.codice:<XMLFile> <Template> <TestElement ID="22"> <PlugIn Name="ESA620" TestID="1240"/> <Info> <Type>Corrente di dispersione sull'involucro</Type> <Parameter>Condizioni normali, polarità inversa</Parameter> <Name>Condizioni normali, polarità inversa</Name> </Info> <ExpectedResult> <Standard AlphaName="IEC" CompleteName="IEC 60601" Type="Predefined"> <Limit Key="::ST"> <Unit>uA</Unit> <Value Type="High">100</Value> </Limit> </Standard> </ExpectedResult> </TestElement> . . . . . . <TestElement ID="35"> <PlugIn Name="ESA620" TestID="1500"/> <Info> <Type>Corrente ausiliaria paziente</Type> <Name>Corrente ausiliaria paziente</Name> </Info> <ExpectedResult> <Standard AlphaName="IEC" CompleteName="IEC 60601"> <Limit Key="::B"> <Unit>uA</Unit> </Limit> <Limit Key="::BF"> <Unit>uA</Unit> </Limit> <Limit Key="::CF"> <Unit>uA</Unit> </Limit> <Limit Key="::B_DC"> <Unit>uA</Unit> </Limit> <Limit Key="::BF_DC"> <Unit>uA</Unit> </Limit> <Limit Key="::CF_DC"> <Unit>uA</Unit> </Limit> </Standard> </ExpectedResult> <PlugInData PlugIn="ESA620"> <ValueFilter>None</ValueFilter> <EnableBtn Skip="True" NA="True" Step="True"/> <ModuleOptions Sep="False" Exp="False" Stop="False"/> <TestOptions> <Run Opt="False" HaltOnFail="True" MultiPE="False" TotalLeakage="False" MeasType="0" TestVoltage="0" AppliedParts="0"/> <StopOnPC Before="False" After="False"/> <Delay On="2" Off="0"/> </TestOptions> </PlugInData> <TestElement ID="36"> <PlugIn Name="ESA620" TestID="1510"/> <Info> <Type>Corrente ausiliaria paziente</Type> <Parameter>Condizioni normali</Parameter> <Name>Condizioni normali</Name> </Info> <ExpectedResult> <Standard AlphaName="IEC" CompleteName="IEC 60601" Type="Predefined"> <Limit Key="::B"> <Unit>uA</Unit> <Value Type="High">100</Value> </Limit> <Limit Key="::BF"> <Unit>uA</Unit> <Value Type="High">100</Value> </Limit> <Limit Key="::CF"> <Unit>uA</Unit> <Value Type="High">10</Value> </Limit> <Limit Key="::B_DC"> <Unit>uA</Unit> <Value Type="High">10</Value> </Limit> <Limit Key="::BF_DC"> <Unit>uA</Unit> <Value Type="High">10</Value> </Limit> <Limit Key="::CF_DC"> <Unit>uA</Unit> <Value Type="High">10</Value> </Limit> </Standard> </ExpectedResult> </TestElement> <TestElement ID="37"> <PlugIn Name="ESA620" TestID="1520"/> <Info> <Type>Corrente ausiliaria paziente</Type> <Parameter>Neutro aperto</Parameter> <Name>Neutro aperto</Name> </Info> <ExpectedResult> <Standard AlphaName="IEC" CompleteName="IEC 60601" Type="Predefined"> <Limit Key="::B"> <Unit>uA</Unit> <Value Type="High">500</Value> </Limit> <Limit Key="::BF"> <Unit>uA</Unit> <Value Type="High">500</Value> </Limit> <Limit Key="::CF"> <Unit>uA</Unit> <Value Type="High">50</Value> </Limit> <Limit Key="::B_DC"> <Unit>uA</Unit> <Value Type="High">50</Value> </Limit> <Limit Key="::BF_DC"> <Unit>uA</Unit> <Value Type="High">50</Value> </Limit> <Limit Key="::CF_DC"> <Unit>uA</Unit> <Value Type="High">50</Value> </Limit> </Standard> </ExpectedResult> </TestElement> <TestElement ID="38"> . . . . . </TestElement> </TestElement> </Template> <Result> <ResultItem MTI="1" ElementID="22"> <Status>Passed</Status> <Measurement Key="::ST"> <Description>Condizioni normali, polarità inversa</Description> <Value Type="Float">.2</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> </ResultItem> . . . . . <ResultItem ElementID="35"> <Status>Passed</Status> <ResultItem MTI="1" ElementID="36"> <Status>Passed</Status> <Measurement Key="::1::B"> <Description>circuito paziente</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::2::CF"> <Description>ECG</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::3::B"> <Description>Spo2</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::4::B"> <Description>NiBp</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> </ResultItem> <ResultItem MTI="1" ElementID="37"> <Status>Passed</Status> <Measurement Key="::1::B"> <Description>circuito paziente</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::2::CF"> <Description>ECG</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::3::B"> <Description>Spo2</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> <Measurement Key="::4::B"> <Description>NiBp</Description> <Value Type="Float">.1</Value> <Unit>uA</Unit> <Status>Passed</Status> </Measurement> </ResultItem> <ResultItem MTI="1" ElementID="38"> . . . . . . </ResultItem> </ResultItem> </Result> </XMLFile>
Ho provato a leggerlo con il codice riportato sotto, ma non mi funziona il foreach dei risultati:
codice:using System; using System.Linq; using System.Xml.Linq; namespace ConsoleApplication23 { class Program { static void Main(string[] args) { XDocument document = XDocument.Load("Data.xml"); #region Fetch All the Books var Template = from t in document.Descendants("TemplateData").Descendants("TestElement") select new { PlugIn = (string) t.Element("ExpectedResult").Element("Standard").Attribute("CompleteName").Value, IDT = (string) t.Attribute("ID"), Tipo = (string) t.Element("Info").Element("Type").Value, Nome = (string) t.Element("Info").Element("Name").Value, Parameter = (string) t.Element("Info").Element("Parameter") ?? "", }; foreach (var t in Template) { var Result = from r in document.Descendants("ResultData").Descendants("ResultItem").Where(r => (string)r.Attribute("ElementID") == t.IDT) select new { IDR = (string) r.Attribute("ElementID").Value ?? "", StatusGroup = (string) r.Element("Status").Value ?? "", Description = (string) r.Element("Measurement").Element("Description").Value ?? "", Value = (string) r.Element("Measurement").Element("Value").Value ?? "", Unit = (string) r.Element("Measurement").Element("Unit").Value ?? "", Status = (string) r.Element("Measurement").Element("Status").Value ?? "", }; } Console.ReadKey(true); #endregion } } }
Quello che tento di ottenere è:
Corrente di dispersione sull'involucro:
Condizioni normali, polarit'inversa,
Unit: uA, Limit High:100, Value: .2, Status Passed
Corrente ausiliaria paziente:
Corrente ausiliaria paziente:
Patient Circuit: Unit:uA, Limit High: 100, Value: .1 Status: Passed
ECG: Unit:uA, Limit High: 10, Value: .1 Status: Passed
Spo2: Unit:uA, Limit High: 100, Value: .1 Status: Passed
NiBp: Unit:uA, Limit High: 100, Value: .1 Status: Passed
Neutral Open:
Patient current Auxiliary:
Patient Circuit: Unit:uA, Limit High: 500, Value: .1 Status: Passed
ECG: Unit:uA, Limit High: 50, Value: .1 Status: Passed
Spo2: Unit:uA, Limit High: 500, Value: .1 Status: Passed
NiBp: Unit:uA, Limit High: 500, Value: .1 Status: Passed
Come posso fare ????
Grazie anticipatamente per l'aiuto

Rispondi quotando