/// <summary>
        /// Convert PrioritizeInnerXml To regular XML text.
        /// </summary>
        /// <param name="node">Target node</param>
        /// <returns>Stream written regular XML text.</returns>
        public static Stream ConvertInnerXmlToXmlText(SavannahTagNode node)
        {
            var lines     = node.PrioritizeInnerXml.UnifiedBreakLine().Split('\n');
            var spaceText = AbstractSavannahXmlNode.MakeSpace(AbstractSavannahXmlNode.DefaultIndentSize);
            var converted = string.Join("\n", lines.Select(x => $"{spaceText}{x}"));

            var xml          = $"\n{converted}\n";
            var xDocument    = new XmlDocument();
            var xDeclaration = xDocument.CreateProcessingInstruction("xml", SavannahXmlConstants.Utf8Declaration);
            var elem         = xDocument.CreateElement("root");

            xDocument.AppendChild(xDeclaration);
            elem.InnerXml = xml;
            xDocument.AppendChild(elem);

            var ms     = new MemoryStream();
            var writer = new XmlTextWriter(ms, Encoding.Unicode)
            {
                Formatting  = Formatting.Indented,
                Indentation = AbstractSavannahXmlNode.DefaultIndentSize,
                IndentChar  = ' '
            };

            xDocument.WriteContentTo(writer);
            writer.Flush();
            ms.Flush();
            ms.Position = 0;

            return(ms);
        }
        private static void ApplyInnerText(AbstractSavannahXmlNode node)
        {
            if (node is SavannahTagNode tagNode)
            {
                var sb = new List <string>();
                foreach (var child in tagNode.ChildNodes)
                {
                    if (child is SavannahTextNode textNode)
                    {
                        sb.Add(textNode.InnerText);
                    }

                    ApplyInnerText(child);
                }

                tagNode.InnerText = string.Join("\n", sb);
            }
        }
        public void GetNodesTest()
        {
            var exp = new AbstractSavannahXmlNode[]
            {
                new SavannahTagNode
                {
                    TagName    = "property",
                    Attributes = new AttributeInfo[]
                    {
                        new AttributeInfo
                        {
                            Name  = "name",
                            Value = "ServerName"
                        },
                        new AttributeInfo
                        {
                            Name  = "value",
                            Value = "My Game Host"
                        }
                    },
                    ChildNodes = new[]
                    {
                        new SavannahTextNode
                        {
                            InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。"
                        }
                    },
                    InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。"
                },
                new SavannahTagNode
                {
                    TagName    = "property",
                    Attributes = new AttributeInfo[]
                    {
                        new AttributeInfo
                        {
                            Name  = "name",
                            Value = "ServerName2"
                        },
                        new AttributeInfo
                        {
                            Name  = "value",
                            Value = "My Game Host"
                        }
                    },
                    ChildNodes = new[]
                    {
                        new SavannahTextNode
                        {
                            InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。\n    test"
                        }
                    },
                    InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。\n    test"
                },
            };

            var reader     = new SavannahXmlReader(GetTestPath());
            var firstNode  = reader.GetNodes("/ServerSettings/property[contains(@name, 'ServerName')]");
            var secondNode = reader.GetNodes("/ServerSettings/property[contains(@name, 'ServerName')]");

            Assert.AreEqual(exp, firstNode);
            Assert.AreEqual(exp, secondNode);
        }