/// <summary>
        /// Demonstrates how to disable validation when writing an XLIFF document.
        /// </summary>
        /// <param name="document">The document to write.</param>
        /// <param name="file">The path to the document to write.</param>
        public static void DisableValidationOnWrite(XliffDocument document, string file)
        {
            using (IO.FileStream stream = new IO.FileStream(file, IO.FileMode.Create, IO.FileAccess.Write))
            {
                XliffWriter writer;
                XliffWriterSettings settings;

                settings = new XliffWriterSettings();
                settings.Validators.Clear();

                writer = new XliffWriter(settings);
                writer.Serialize(stream, document);
            }
        }
        /// <summary>
        /// Demonstrates how to write an XLIFF document to a file.
        /// </summary>
        /// <param name="document">The document to write.</param>
        /// <param name="file">The path to write the document to.</param>
        public static void WriteDocument(XliffDocument document, string file)
        {
            using (IO.FileStream stream = new IO.FileStream(file, IO.FileMode.Create, IO.FileAccess.Write))
            {
                XliffWriter writer;

                writer = new XliffWriter();
                writer.Serialize(stream, document);
            }
        }
        /// <summary>
        /// Demonstrates how to validate a document on write and display the data where the validation error occurred.
        /// </summary>
        /// <param name="document">The document to validate.</param>
        /// <param name="file">The path to write the document to.</param>
        public static void ViewValidations(XliffDocument document, string file)
        {
            using (IO.FileStream stream = new IO.FileStream(file, IO.FileMode.Create, IO.FileAccess.Write))
            {
                XliffWriter writer;

                writer = new XliffWriter();

                try
                {
                    writer.Serialize(stream, document);
                }
                catch (ValidationException e)
                {
                    Console.WriteLine("ValidationException Details:");
                    if (e.Data != null)
                    {
                        foreach (object key in e.Data.Keys)
                        {
                            Console.WriteLine("  '{0}': '{1}'", key, e.Data[key]);
                        }
                    }
                }
            }
        }
        public void Extensibility_FullDocumentRoundtrip()
        {
            XliffDocument document;
            string documentContents;
            string fileContents;
            int mismatchIndex;

            this.ids.Clear();

            document = this.CreateFullyLoadedDocument();
            documentContents = TestUtilities.GetDocumentContents(document, string.Empty);
            fileContents = TestUtilities.GetFileContents(TestData.DocumentWithEverything);
            mismatchIndex = -1;
            for (int i = 0; i < fileContents.Length; i++)
            {
                if ((mismatchIndex < 0) && (fileContents[i] != documentContents[i]))
                {
                    mismatchIndex = i;
                    break;
                }
            }

            if (mismatchIndex >= 0)
            {
                Console.WriteLine("Expected Output:");
                Console.WriteLine(fileContents);
                Console.WriteLine();
                Console.WriteLine("Actual Output:");
                Console.WriteLine(documentContents);
                Console.WriteLine();
            }

            Assert.IsTrue(fileContents == documentContents,
                          "Document contents are incorrect starting at index {0} (neighbor chars are '{1}' vs. '{2}').",
                          mismatchIndex,
                          (mismatchIndex >= 10) ? fileContents.Substring(mismatchIndex - 10, 20) : "[see output]",
                          (mismatchIndex >= 10) ? documentContents.Substring(mismatchIndex - 10, 20) : "[see output]");

            Console.WriteLine("Serializing and deserializing document");
            using (IO.MemoryStream stream = new IO.MemoryStream())
            {
                XliffReader reader;
                XliffWriter writer;

                writer = new XliffWriter();
                writer.Serialize(stream, document);

                stream.Seek(0, IO.SeekOrigin.Begin);
                reader = new XliffReader();
                document = reader.Deserialize(stream);

                Assert.AreEqual(
                              TestUtilities.GetFileContents(TestData.DocumentWithEverything),
                              TestUtilities.GetDocumentContents(document, string.Empty),
                              "Document contents are incorrect.");
            }
        }