/// <summary>
        /// </summary>
        /// 
        /// <returns>
        /// </returns>
        /// 
        /// <remarks>
        /// This method accesses the HealthVault service across the network.
        /// If the filters specified do not reduce the amount of data being retrieved from the
        /// record, this method could take a significant amount of time as data gets paged into
        /// memory from HealthVault.
        /// 
        /// Note: There may be data in items that HealthVault does not include when converting 
        /// to the CCR or CCD formats.
        /// </remarks>
        /// 
        /// <exception cref="HealthServiceException">
        /// The response from the server was anything but 
        /// <see cref="HealthServiceStatusCode.Ok"/>.
        /// -or-
        /// <see cref="Microsoft.Health.HealthRecordSearcher.Filters"/> is empty
        /// or contains invalid filters.
        /// </exception>
        /// 
        public string ExportItems()
        {
            HealthRecordSearcher searcher = new HealthRecordSearcher(_record);

            for (int index = 0; index < Filters.Count; ++index)
            {
                searcher.Filters.Add(Filters[index]);
            }

            ReadOnlyCollection<HealthRecordItemCollection> results = searcher.GetMatchingItems();

            StringBuilder resultXml = new StringBuilder(1000);
            XmlWriterSettings settings = SDKHelper.XmlUnicodeWriterSettings;
            settings.ConformanceLevel = ConformanceLevel.Document;

            using (XmlWriter writer = XmlWriter.Create(resultXml, settings))
            {
                // <response>
                writer.WriteStartElement("response");

                // <wc:info>
                writer.WriteStartElement("wc", "info", "urn:com.microsoft.wc.methods.response.GetThings3");

                foreach (HealthRecordItemCollection items in results)
                {
                    // <group>
                    writer.WriteStartElement("group");

                    // We are leveraging the HealthRecordItemCollection paging here to retrieve
                    // all the data from HealthVault if it doesn't come with the first request.
                    for (int itemIndex = 0; itemIndex < items.Count; ++itemIndex)
                    {
                        bool filterApproved = true;
                        foreach (HealthRecordClientFilterHandler filter in ClientFilters)
                        {
                            filterApproved = filter(items[itemIndex]);
                            if (!filterApproved)
                            {
                                break;
                            }
                        }

                        if (filterApproved)
                        {
                            items[itemIndex].WriteItemXml(writer, true, "thing");
                        }
                    }

                    // </group>
                    writer.WriteEndElement();
                }

                // </wc:info>
                writer.WriteEndElement();

                // </response>
                writer.WriteEndElement();

                writer.Flush();
                writer.Close();
            }

            return TransformItemXml(resultXml.ToString());
        }