[gxml] XParser: Fixed write_string()



commit bb389d90d13b3f4a5e8ecb9b89d7d77d371e79eb
Author: Daniel Espinosa <esodan gmail com>
Date:   Tue Nov 1 13:30:59 2016 -0600

    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 ee3c751..07fe6f8 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 4926057..1da0c5f 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 b533f85..492d9bd 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 58a61a8..40917ae 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 b30e966..f0853e8 100644
--- a/test/GomDocumentTest.vala
+++ b/test/GomDocumentTest.vala
@@ -268,7 +268,10 @@ class GomDocumentTest : GXmlTest {
                        try {
                                DomDocument doc = new GomDocument.from_string ("<?xml version=\"1.0\"?>
 <Sentences><Sentence lang=\"en\">I like the colour blue.</Sentence><Sentence lang=\"de\">Ich liebe die 
T&#xFC;r.</Sentence><Authors><Author><Name>Fred</Name><Email>fweasley hogwarts co 
uk</Email></Author><Author><Name>George</Name><Email>gweasley hogwarts co 
uk</Email></Author></Authors></Sentences>");
-                               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] == "<?xml version=\"1.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 ());


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]