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 :
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>
Il file e' formato da due parti: la prima e' il template e la seconda parte è formata dai risultati.
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