Commit 52dd77dd authored by olivier R-D's avatar olivier R-D

export lists in xml

parent 2ed60d8c
...@@ -112,9 +112,7 @@ class XmlExporter(object): ...@@ -112,9 +112,7 @@ class XmlExporter(object):
parent = node.get_parent() parent = node.get_parent()
displayname = node.get_display_name().Text.decode(encoding='UTF8') displayname = node.get_display_name().Text.decode(encoding='UTF8')
desc = node.get_description().Text desc = node.get_description().Text
if desc is None: print("NODE COMMON", node)
desc = ""
print("NODE COMMON", node, desc)
node_el = Et.SubElement(self.etree.getroot(), node_el = Et.SubElement(self.etree.getroot(),
nodetype, nodetype,
BrowseName=browsename, BrowseName=browsename,
...@@ -122,7 +120,7 @@ class XmlExporter(object): ...@@ -122,7 +120,7 @@ class XmlExporter(object):
if parent is not None: if parent is not None:
node_el.attrib["ParentNodeId"] = parent.nodeid.to_string() node_el.attrib["ParentNodeId"] = parent.nodeid.to_string()
if desc not in (None, ""): if desc not in (None, ""):
node_el.attrib["Description"] = desc node_el.attrib["Description"] = str(desc)
disp_el = Et.SubElement(node_el, 'DisplayName', ) disp_el = Et.SubElement(node_el, 'DisplayName', )
disp_el.text = displayname disp_el.text = displayname
return node_el return node_el
...@@ -146,14 +144,14 @@ class XmlExporter(object): ...@@ -146,14 +144,14 @@ class XmlExporter(object):
def add_variable_common(self, node, el): def add_variable_common(self, node, el):
dtype = node.get_data_type() dtype = node.get_data_type()
if dtype.Identifier in o_ids.ObjectIdNames: if dtype.Identifier in o_ids.ObjectIdNames:
datatype = o_ids.ObjectIdNames[dtype.Identifier] dtype_name = o_ids.ObjectIdNames[dtype.Identifier]
self.aliases[datatype] = dtype.to_string() self.aliases[dtype_name] = dtype.to_string()
else: else:
datatype = dtype.to_string() dtype_name = dtype.to_string()
rank = node.get_value_rank() rank = node.get_value_rank()
el.attrib["DataType"] = datatype el.attrib["DataType"] = dtype_name
el.attrib["ValueRank"] = str(rank) el.attrib["ValueRank"] = str(int(rank))
variant_to_etree(el, node.get_data_value().Value) value_to_etree(el, dtype_name, dtype, node)
def add_etree_variable(self, node): def add_etree_variable(self, node):
""" """
...@@ -238,10 +236,32 @@ class XmlExporter(object): ...@@ -238,10 +236,32 @@ class XmlExporter(object):
self.aliases[ref_name] = ref_nodeid self.aliases[ref_name] = ref_nodeid
def variant_to_etree(el, var): def value_to_etree(el, dtype_name, dtype, node):
var = node.get_data_value().Value
val_el = Et.SubElement(el, 'Value') val_el = Et.SubElement(el, 'Value')
valx_el = Et.SubElement(val_el, var.VariantType.name) _value_to_etree(val_el, dtype_name, dtype, var.Value)
valx_el.attrib["xmnls"] = "http://opcfoundation.org/UA/2008/02/Types.xsd"
valx_el.text = str(var.Value)
def _value_to_etree(el, dtype_name, dtype, val):
if isinstance(val, (list, tuple)):
list_el = Et.SubElement(el, "uax:ListOf" + dtype_name)
for nval in val:
_value_to_etree(list_el, dtype_name, dtype, nval)
else:
if dtype.Identifier is int and dtype.Identifier > 21: # this is an extentionObject:
_extobj_to_etree(el, dtype_name, dtype)
else:
val_el = Et.SubElement(el, "uax:" + dtype_name)
val_el.text = str(val)
def _extobj_to_etree(val_el, dtype_name, dtype, val):
obj_el = Et.SubElement(val_el, "uax:ExtensionObject")
type_el = Et.SubElement(obj_el, "uax:TypeId")
id_el = Et.SubElement(type_el, "uax:Identifier")
id_el.text = val.TypeId.to_string()
body_el = Et.SubElement(obj_el, "uax:Body")
struct_el = Et.SubElement(body_el, "uax:" + dtype_name)
# FIXME: finish
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment