/// <summary> /// Populates this <see cref="Spirometer"/> instance from the data in the XML. /// </summary> /// /// <param name="typeSpecificXml"> /// The XML to get the spirometer data from. /// </param> /// /// <exception cref="InvalidOperationException"> /// The first node in the <paramref name="typeSpecificXml"/> parameter /// is not a spirometer node. /// </exception> /// protected override void ParseXml(IXPathNavigable typeSpecificXml) { XPathNavigator spirometerNav = typeSpecificXml.CreateNavigator().SelectSingleNode( "spirometer"); Validator.ThrowInvalidIfNull(spirometerNav, "SpirometerUnexpectedNode"); _when = new HealthServiceDateTime(); _when.ParseXml(spirometerNav.SelectSingleNode("when")); _forcedExpiratoryVolume = XPathHelper.GetOptNavValue<FlowMeasurement>( spirometerNav, "fev1"); _peakExpiratoryFlow = XPathHelper.GetOptNavValue<FlowMeasurement>( spirometerNav, "pef"); XPathNodeIterator warningsIterator = spirometerNav.Select("warning"); foreach (XPathNavigator warningNav in warningsIterator) { _warnings.Add(warningNav.Value); } XPathNodeIterator problemsIterator = spirometerNav.Select("problem"); foreach (XPathNavigator problemNav in problemsIterator) { _problems.Add(problemNav.Value); } XPathNavigator fevOverFvcNav = spirometerNav.SelectSingleNode("FEVoverFVC"); if (fevOverFvcNav != null) { _fevOverFvc = fevOverFvcNav.ValueAsDouble; } XPathNavigator fef25to75Nav = spirometerNav.SelectSingleNode("FEF25to75"); if (fef25to75Nav != null) { _fef25to75 = fef25to75Nav.ValueAsDouble; } XPathNavigator fef25to50Nav = spirometerNav.SelectSingleNode("FEF25to50"); if (fef25to50Nav != null) { _fef25to50 = fef25to50Nav.ValueAsDouble; } XPathNavigator fif25to75Nav = spirometerNav.SelectSingleNode("FIF25to75"); if (fif25to75Nav != null) { _fif25to75 = fif25to75Nav.ValueAsDouble; } XPathNavigator fif25to50Nav = spirometerNav.SelectSingleNode("FIF25to50"); if (fif25to50Nav != null) { _fif25to50 = fif25to50Nav.ValueAsDouble; } XPathNavigator fetNav = spirometerNav.SelectSingleNode("FET"); if (fetNav != null) { _fet = fetNav.ValueAsDouble; } _svc = XPathHelper.GetOptNavValue<VolumeMeasurement>( spirometerNav, "SVC"); _tv = XPathHelper.GetOptNavValue<VolumeMeasurement>( spirometerNav, "TV"); _mvv = XPathHelper.GetOptNavValue<FlowMeasurement>( spirometerNav, "MVV"); }
/// <summary> /// Populates this <see cref="PeakFlow"/> instance from the data in the XML. /// </summary> /// /// <param name="typeSpecificXml"> /// The XML to get the peack flow data from. /// </param> /// /// <exception cref="InvalidOperationException"> /// The first node in the <paramref name="typeSpecificXml"/> parameter /// is not a peak-flow node. /// </exception> /// protected override void ParseXml(IXPathNavigable typeSpecificXml) { XPathNavigator itemNav = typeSpecificXml.CreateNavigator().SelectSingleNode( "peak-flow"); Validator.ThrowInvalidIfNull(itemNav, "PeakFlowUnexpectedNode"); _when = new ApproximateDateTime(); _when.ParseXml(itemNav.SelectSingleNode("when")); _peakExpiratoryFlow = XPathHelper.GetOptNavValue<FlowMeasurement>( itemNav, "pef"); _fev1 = XPathHelper.GetOptNavValue<VolumeMeasurement>( itemNav, "fev1"); _fev6 = XPathHelper.GetOptNavValue<VolumeMeasurement>( itemNav, "fev6"); _measurementFlags.Clear(); XPathNodeIterator measurementFlagsIterator = itemNav.Select("measurement-flags"); foreach (XPathNavigator flagNav in measurementFlagsIterator) { CodableValue flag = new CodableValue(); flag.ParseXml(flagNav); _measurementFlags.Add(flag); } }