public void WritePrioritizeInnerXmlSpaceTest() { var root = new SavannahTagNode { TagName = "root", PrioritizeInnerXml = " aaaaaa\naa\n aaaa" }; var exp = new SavannahTagNode { TagName = "root", InnerText = " aaaaaa\naa\n aaaa", ChildNodes = new[] { new SavannahTextNode { InnerText = " aaaaaa\naa\n aaaa" }, } }; root.ResolvePrioritizeInnerXml(false); var xml = $"{SavannahXmlConstants.Declaration}\n{root}"; var data = Encoding.UTF8.GetBytes(xml); var stream = new MemoryStream(); stream.Write(data, 0, data.Length); stream.Position = 0; var reader = new SavannahXmlReader(stream); var node = reader.GetAllNodes(); Assert.AreEqual(exp, node); }
public void WriteCdataTest() { var root = new SavannahTagNode { TagName = "root", ChildNodes = new [] { new SavannahTagNode { TagName = "tag", InnerText = "", ChildNodes = new[] { new SavannahCdataNode { InnerText = " <?xml version=\"1.0\"?>\n <document>\n doc.\n </document>", } } } } }; var ms = new MemoryStream(); var writer = new SavannahXmlWriter(); writer.Write(ms, root); ms.Position = 0; var xml = new StreamReader(ms).ReadToEnd(); var exp = File.ReadAllText(CommonXmlReaderTest.GetTestPath("Cdata.xml")).UnifiedBreakLine(); Assert.AreEqual(exp, xml); }
/// <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); }
public void GetNodeTest() { var exp = new SavannahTagNode { TagName = "property", Attributes = new List <AttributeInfo> { new AttributeInfo { Name = "name", Value = "ServerName" }, new AttributeInfo { Name = "value", Value = "My Game Host" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。" } }, InnerText = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。" }; var reader = new SavannahXmlReader(GetTestPath()); var firstNode = reader.GetNode("/ServerSettings/property[@name='ServerName']"); var SecondNode = reader.GetNode("/ServerSettings/property[@name='ServerName']"); Assert.AreEqual(exp, firstNode); Assert.AreEqual(exp, SecondNode); }
public void ReadCdataTest() { var reader = new SavannahXmlReader(GetTestPath("Cdata.xml")); var root = reader.GetAllNodes(); var exp = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "tag", InnerText = "", ChildNodes = new[] { new SavannahCdataNode { InnerText = " <?xml version=\"1.0\"?>\n <document>\n doc.\n </document>", } } } } }; Assert.AreEqual(exp, root); }
public void ToStringIndentTest() { var commonXmlNode2 = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "ChildNode", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "attr" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "Value" } } } } }; var exp = "<root>\n <ChildNode name=\"attr\">\n Value\n </ChildNode>\n</root>"; var act = commonXmlNode2.ToString(4); Assert.AreEqual(exp, act); }
public void WritePrioritizeInnerXmlSpaceTest2() { var root = new SavannahTagNode { TagName = "root", PrioritizeInnerXml = "aaa\n<br />\n bbb\n<br />\nbbb\n<br />\ncccc\n<test>\n <bbb />\n</test>\n" }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTextNode { InnerText = "aaa" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = " bbb" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "bbb" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "cccc" }, new SavannahTagNode { TagName = "test", ChildNodes = new [] { new SavannahTagNode { TagName = "bbb" } } } } }; root.ResolvePrioritizeInnerXml(false); Assert.AreEqual(exp, root); }
/// <summary> /// Writes the XML to the specified file. /// </summary> /// <param name="stream">Stream to be written</param> /// <param name="root">The root of the XML to be written</param> public void Write(Stream stream, SavannahTagNode root) { root.ResolvePrioritizeInnerXml(IgnoreComments); var xml = root.ToString(); var declaration = xDeclaration.OuterXml; var data = Encoding.UTF8.GetBytes($"{declaration}\n{xml}\n"); stream.Write(data, 0, data.Length); }
public void SearchElementWithXPathTest() { var textNode = new SavannahTextNode { InnerText = "aaa" }; var testNode = new SavannahTagNode { TagName = "test", ChildNodes = new[] { new SavannahTagNode { TagName = "br", Attributes = new List <AttributeInfo> { new AttributeInfo { Name = "attr", Value = "value" } } }, } }; var root = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "test" }, textNode, new SavannahTagNode { TagName = "test", ChildNodes = new [] { new SavannahTagNode { TagName = "br" }, } }, testNode } }; var testReader = ((SavannahTagNode)root.ChildNodes.ToArray()[3]).GetReader(); var resultTestNode = testReader.GetNode("/test/br"); Assert.AreEqual(resultTestNode, testNode.ChildNodes.First()); }
public void WriteTestPrioritizeInnerXml() { var root = new SavannahTagNode { TagName = "root" }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new [] { new SavannahTagNode { TagName = "test", InnerText = "test\naaaa\nbbb", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTextNode { InnerText = "test" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "aaaa" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "bbb" } } } } }; root.PrioritizeInnerXml = "<test>test<br />aaaa<br />bbb</test>"; var writer = new SavannahXmlWriter("version=\"1.0\" encoding=\"UTF-8\""); using var ms = new MemoryStream(); writer.Write(ms, root); ms.Seek(0, SeekOrigin.Begin); var reader = new SavannahXmlReader(ms); var act = reader.GetAllNodes(); Assert.AreEqual(exp, act); }
public void RemoveAttributeTest() { var itemNode = SavannahTagNode.CreateElement("item", new[] { new AttributeInfo { Name = "attr", Value = "value" } }); var exp = SavannahTagNode.CreateElement("item"); itemNode.RemoveAttribute("attr"); Assert.AreEqual(exp, itemNode); }
public void AddBeforeSameChildTest() { var root = new SavannahTagNode { TagName = "root", PrioritizeInnerXml = "<br />\naaaa\n<br />\nbbb\n<br />\nccc" }; root.ResolvePrioritizeInnerXml(); var exp = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "br" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "aaaa" }, new SavannahTextNode { InnerText = "bbb" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "ccc" } } }; var newNode = root.ChildNodes.ElementAt(2); var target = root.ChildNodes.ElementAt(1); root.RemoveChildElement(newNode); root.AddBeforeChildElement(target, newNode); Assert.AreEqual(exp, root); }
/// <summary> /// Convert the XmlNode object to the SavannahXmlNode object. /// </summary> /// <param name="node">XmlNode object.</param> /// <param name="isRemoveSpace">Whether to clear indentation blanks.</param> /// <param name="table"> /// This is a table of XmlNode and SavannahXmlNode. /// It associates the generated SavannahXmlNode with the XmlNode. /// </param> /// <returns>The node.</returns> public static AbstractSavannahXmlNode ConvertXmlNode(XmlNode node, int indentSize, bool isRemoveSpace = true, Dictionary <XmlNode, AbstractSavannahXmlNode> table = null) { var hierarchy = GetHierarchyFromParent(node); var commonXmlNode = new SavannahTagNode { TagName = node.Name, InnerText = ResolveInnerText(node, isRemoveSpace), Attributes = ConvertAttributeInfoArray(node.Attributes), ChildNodes = GetElements(node.ChildNodes, isRemoveSpace, indentSize, hierarchy, table) }; table?.Add(node, commonXmlNode); ApplyInnerText(commonXmlNode); return(commonXmlNode); }
public void WriteTest2() { var root = new SavannahTagNode { TagName = "root", InnerText = "aaaaa", ChildNodes = new[] { new SavannahTextNode { InnerText = "bbbbb" } } }; var exp = new SavannahTagNode { TagName = "root", InnerText = "bbbbb", ChildNodes = new[] { new SavannahTextNode { InnerText = "bbbbb" } } }; var writer = new SavannahXmlWriter("version=\"1.0\" encoding=\"UTF-8\""); using var ms = new MemoryStream(); writer.Write(ms, root); ms.Seek(0, SeekOrigin.Begin); using var sr = new StreamReader(ms); var xml = sr.ReadToEnd(); ms.Seek(0, SeekOrigin.Begin); var reader = new SavannahXmlReader(ms); var act = reader.GetAllNodes(); Assert.AreEqual(exp, act); }
public void CommentTest() { var exp = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahCommentNode { InnerText = "Comment Test\nNew" }, new SavannahTagNode { TagName = "value", InnerText = "test", Attributes = new [] { new AttributeInfo { Name = "attr", Value = "value" }, new AttributeInfo { Name = "attr2", Value = "value2" } }, ChildNodes = new [] { new SavannahTextNode { InnerText = "test" } } }, } }; var reader = new SavannahXmlReader(GetTestPath("Comment.xml"), false); var node = reader.GetAllNodes(); Assert.AreEqual(exp, node); }
private static List <AbstractSavannahXmlNode> GetElements(XmlNodeList nodeList, bool isRemoveSpace, int indentSize, int hierarchy = 1, Dictionary <XmlNode, AbstractSavannahXmlNode> table = null) { var list = new List <AbstractSavannahXmlNode>(); if (nodeList.Count <= 0) { return(list); } var space = indentSize * hierarchy; foreach (var n in nodeList) { if (n is XmlElement) { var node = (XmlElement)n; var commonXmlNode = new SavannahTagNode { TagName = node.Name, InnerText = ResolveInnerText(node, isRemoveSpace), Attributes = ConvertAttributeInfoArray(node.Attributes) }; if (node.ChildNodes.Count > 0) { commonXmlNode.ChildNodes = GetElements(node.ChildNodes, isRemoveSpace, indentSize, hierarchy + 1, table).ToArray(); } list.Add(commonXmlNode); table?.Add(node, commonXmlNode); } if (n is XmlCharacterData) { var node = (XmlCharacterData)n; var commonXmlNode = ConvertXmlCharacterData(node, isRemoveSpace, space); list.Add(commonXmlNode); table?.Add(node, commonXmlNode); } } return(list); }
public void EqualsTest() { var commonXmlNode1 = SavannahTagNode.CreateRoot("root"); commonXmlNode1.CreateChildElement("ChildNode", new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "attr" } }, "Value"); var commonXmlNode2 = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "ChildNode", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "attr" } }, PrioritizeInnerXml = "Value" } } }; var value = commonXmlNode1.Equals(commonXmlNode2); Assert.AreEqual(true, value); }
public void OutterXmlTest() { var commonXmlNode2 = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "ChildNode", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "attr" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "Value" } } } } }; var exp = "<root>\n <ChildNode name=\"attr\">\n Value\n </ChildNode>\n</root>"; commonXmlNode2.ResolvePrioritizeInnerXml(); var act = commonXmlNode2.ChildNodes.First().OutterXml; Assert.AreEqual(exp, act); }
public void PrioritizeInnerXmlCommentTest() { var root = new SavannahTagNode { TagName = "root", PrioritizeInnerXml = "<!--\n more\n more2\n-->" }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new [] { new SavannahCommentNode { InnerText = "more\nmore2" } } }; root.ResolvePrioritizeInnerXml(false); Assert.AreEqual(exp, root); }
public void PrioritizeInnerXmlSpaceTest() { var root = new SavannahTagNode { TagName = "root", PrioritizeInnerXml = "test\n test2\ntest3" }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTextNode { InnerText = "test\n test2\ntest3" } } }; root.ResolvePrioritizeInnerXml(false); Assert.AreEqual(exp, root); }
public void SpecifyIndentTest() { var exp = new SavannahTagNode { TagName = "ServerSettings", ChildNodes = new[] { 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" }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "ServerDescription" }, new AttributeInfo { Name = "value", Value = "A 7 Days to Die server" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "サーバーの説明を設定します。" } }, InnerText = "サーバーの説明を設定します。" }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "ServerWebsiteURL" }, new AttributeInfo { Name = "value", Value = "" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "サーバーのウェブサイトを設定します。" } }, InnerText = "サーバーのウェブサイトを設定します。" }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "Nested" } }, ChildNodes = new[] { new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "NestedElem" } }, ChildNodes = new[] { new SavannahTextNode { InnerText = "Value" } }, InnerText = "Value" } } } } }; var reader = new SavannahXmlReader(GetTestPath("Test_four_indent.xml")) { IndentSize = 4 }; var node = reader.GetAllNodes(); Assert.AreEqual(exp, node); }
public void PrioritizeInnerXmlTest() { var root = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "cov", PrioritizeInnerXml = "<test>test<br />aaaa<br />bbb</test>" }, new SavannahTextNode { InnerText = "value" } } }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "cov", ChildNodes = new [] { new SavannahTagNode { TagName = "test", InnerText = "test\naaaa\nbbb", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTextNode { InnerText = "test" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "aaaa" }, new SavannahTagNode { TagName = "br" }, new SavannahTextNode { InnerText = "bbb" } } } } }, new SavannahTextNode { InnerText = "value" } } }; root.ResolvePrioritizeInnerXml(); Assert.AreEqual(exp, root); }
/// <summary> /// Writes the XML to the specified file. /// </summary> /// <param name="path">Path of the file to be written</param> /// <param name="root">The root of the XML to be written</param> public void Write(string path, SavannahTagNode root) { using var fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.Read); Write(fs, root); }
public void WriteTest3() { var root = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "test", ChildNodes = new[] { new SavannahTagNode { TagName = "test", ChildNodes = new[] { new SavannahTextNode { InnerText = "bbbbb\naaaaa\nccccc" } } } } }, new SavannahTagNode { TagName = "vehicle", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTextNode { InnerText = "bbbbb\naaaaa\nccccc" }, new SavannahTagNode { TagName = "br", } } } } }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new[] { new SavannahTagNode { TagName = "test", ChildNodes = new[] { new SavannahTagNode { TagName = "test", InnerText = "bbbbb\naaaaa\nccccc", ChildNodes = new[] { new SavannahTextNode { InnerText = "bbbbb\naaaaa\nccccc" } } } } }, new SavannahTagNode { TagName = "vehicle", InnerText = "bbbbb\naaaaa\nccccc", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTextNode { InnerText = "bbbbb\naaaaa\nccccc" }, new SavannahTagNode { TagName = "br", } } } } }; var writer = new SavannahXmlWriter("version=\"1.0\" encoding=\"UTF-8\""); using var ms = new MemoryStream(); writer.Write(ms, root); ms.Seek(0, SeekOrigin.Begin); var reader = new SavannahXmlReader(ms); var act = reader.GetAllNodes(); Assert.AreEqual(exp, act); }
public void AddAfterChildTest() { var textNode = new SavannahTextNode { InnerText = "aaa" }; var testNode = new SavannahTagNode { TagName = "test", ChildNodes = new[] { new SavannahTagNode { TagName = "br", Attributes = new List <AttributeInfo> { new AttributeInfo { Name = "attr", Value = "value" } } }, } }; var root = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "test" }, textNode, new SavannahTagNode { TagName = "test", ChildNodes = new [] { new SavannahTagNode { TagName = "br" }, } } } }; var exp = new SavannahTagNode { TagName = "root", ChildNodes = new AbstractSavannahXmlNode[] { new SavannahTagNode { TagName = "test" }, textNode, testNode, new SavannahTagNode { TagName = "test", ChildNodes = new [] { new SavannahTagNode { TagName = "br" }, } } } }; root.AddAfterChildElement(textNode, testNode); Assert.AreEqual(exp, root); }
public void WriteTest() { var root = new SavannahTagNode { TagName = "ServerSettings", ChildNodes = new[] { 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 = "サーバー名を設定します。サーバーリストにはこの名前で表示されます。" } } }, 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" } } }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "ServerDescription" }, new AttributeInfo { Name = "value", Value = "A 7 Days to Die server" } }, ChildNodes = new [] { new SavannahTextNode { InnerText = "サーバーの説明を設定します。" } } }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "ServerWebsiteURL" }, new AttributeInfo { Name = "value", Value = "" } }, ChildNodes = new [] { new SavannahTextNode { InnerText = "サーバーのウェブサイトを設定します。" } } }, new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "Nested" } }, ChildNodes = new[] { new SavannahTagNode { TagName = "property", Attributes = new AttributeInfo[] { new AttributeInfo { Name = "name", Value = "NestedElem" } }, ChildNodes = new [] { new SavannahTextNode { InnerText = "Value" } } } } } } }; var exp = File.ReadAllText(CommonXmlReaderTest.GetTestPath()).UnifiedBreakLine(); var writer = new SavannahXmlWriter("version=\"1.0\" encoding=\"UTF-8\""); using var ms = new MemoryStream(); writer.Write(ms, root); ms.Seek(0, SeekOrigin.Begin); using var sr = new StreamReader(ms); var xml = sr.ReadToEnd().UnifiedBreakLine(); Assert.AreEqual(exp, xml); }