/// <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); }