From bb389d90d13b3f4a5e8ecb9b89d7d77d371e79eb Mon Sep 17 00:00:00 2001 From: Daniel Espinosa Date: Tue, 1 Nov 2016 13:30:59 -0600 Subject: [PATCH] XParser: Fixed write_string() --- gxml/GomDocument.vala | 4 ++++ gxml/GomElement.vala | 27 +++++++++++++++++++++------ gxml/GomText.vala | 1 - gxml/XParser.vala | 12 +++++++++++- test/GomDocumentTest.vala | 9 ++++++--- 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/gxml/GomDocument.vala b/gxml/GomDocument.vala index ee3c7514..07fe6f8a 100644 --- a/gxml/GomDocument.vala +++ b/gxml/GomDocument.vala @@ -93,6 +93,10 @@ public class GXml.GomDocument : GomNode, } + public string to_string () { + return parser.write_string (); + } + public DomElement create_element (string local_name) throws GLib.Error { return new GomElement (this, local_name); } diff --git a/gxml/GomElement.vala b/gxml/GomElement.vala index 4926057e..1da0c5fd 100644 --- a/gxml/GomElement.vala +++ b/gxml/GomElement.vala @@ -189,13 +189,28 @@ public class GXml.GomElement : GomNode, } public DomNode? get_named_item (string name) { - // TODO: Validate name throw INVALID_CHARACTER_ERROR if (name == "") return null; - if (":" in name) return null; - var v = get (name); - if (v == null) return null; - var n = new GomAttr (_element, name, v); - return n; + string p = ""; + string ns = null; + string n = ""; + if (":" in name) { + string[] s = name.split (":"); + if (s.length > 2) return null; + p = s[0]; + n = s[1]; + if (p == "xmlns") + ns = _element.lookup_namespace_uri (n); + else + ns = _element.lookup_namespace_uri (p); + } + string val = get (name); + if (val == null) return null; + DomNode attr = null; + if (p == null || p == "") + attr = new GomAttr (_element, name, val); + else + attr = new GomAttr.namespace (_element, ns, p, n, val); + return attr; } /** * Takes given {@link DomNode} as a {@link DomAttr} and use its name and diff --git a/gxml/GomText.vala b/gxml/GomText.vala index b533f85c..492d9bd7 100644 --- a/gxml/GomText.vala +++ b/gxml/GomText.vala @@ -32,7 +32,6 @@ public class GXml.GomCharacterData : GomNode, construct { _node_value = ""; - GLib.message ("PI: construct"); } // DomNonDocumentTypeChildNode public DomElement? previous_element_sibling { diff --git a/gxml/XParser.vala b/gxml/XParser.vala index 58a61a8b..40917ae4 100644 --- a/gxml/XParser.vala +++ b/gxml/XParser.vala @@ -279,11 +279,14 @@ public class GXml.XParser : Object, GXml.Parser { tw.flush (); string str; doc.dump_memory (out str, out size); + if (str != null) + GLib.message ("STR: "+str); return str; } private void start_node (GXml.DomNode node) throws GLib.Error { + GLib.message ("Starting node..."); int size = 0; #if DEBUG GLib.message (@"Starting Node: start Node: '$(node.node_name)'"); @@ -297,7 +300,14 @@ public class GXml.XParser : Object, GXml.Parser { tw.start_element_ns ((node as DomElement).prefix, (node as DomElement).local_name, (node as DomElement).node_name); else // Don't prefix. Using default namespace and prefix_default_ns = false tw.start_element (node.node_name); - foreach (GXml.DomNode attr in (node as DomElement).attributes.values) { + GLib.message ("Write down properties: size:"+(node as DomElement).attributes.size.to_string ()); + foreach (string ak in (node as DomElement).attributes.keys) { + var attr = (node as DomElement).attributes.get_named_item (ak); + if (attr == null) { + GLib.warning ("Attr key: "+ak+ "not found"); + continue; + } + if (attr.node_name != null) GLib.message ("Attribute name: "+attr.node_name); #if DEBUG GLib.message (@"Starting Element '$(node.node_name)': write attribute '$((attr as DomAttr).local_name)'"); #endif diff --git a/test/GomDocumentTest.vala b/test/GomDocumentTest.vala index b30e9661..f0853e85 100644 --- a/test/GomDocumentTest.vala +++ b/test/GomDocumentTest.vala @@ -268,7 +268,10 @@ class GomDocumentTest : GXmlTest { try { DomDocument doc = new GomDocument.from_string (" I like the colour blue.Ich liebe die Tür.Fredfweasley@hogwarts.co.ukGeorgegweasley@hogwarts.co.uk"); - string s1 = "";//doc.to_string (); + + string s1 = (doc as GomDocument).to_string (); + assert (s1 != null); + GLib.message ("Document Read:"+s1); string[] cs1 = s1.split ("\n"); Test.message (s1); assert (cs1[0] == ""); @@ -277,8 +280,8 @@ class GomDocumentTest : GXmlTest { }); Test.add_func ("/gxml/gom-document/to_string/extended", () => { try { - var d = new GDocument.from_path (GXmlTestConfig.TEST_DIR+"/gom-document-read.xml"); - Test.message (d.to_string ()); + var d = new GomDocument.from_path (GXmlTestConfig.TEST_DIR+"/gom-document-read.xml"); + GLib.message ("Document Read:"+d.to_string ()); assert (d.document_element != null); assert (d.document_element.node_name == "DataTypeTemplates"); Test.message (d.document_element.child_nodes.size.to_string ()); -- GitLab