[gxml] XParser: Fixed write_string()
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] XParser: Fixed write_string()
- Date: Tue, 1 Nov 2016 19:53:16 +0000 (UTC)
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ü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]