@@ -236,6 +236,7 @@ def add_etree_variable(self, node):
236236 Add a UA variable element to the XML etree
237237 """
238238 var_el = self ._add_node_common ("UAVariable" , node )
239+ self ._add_ref_els (var_el , node )
239240 self .add_variable_common (node , var_el )
240241
241242 accesslevel = node .get_attribute (ua .AttributeIds .AccessLevel ).Value .Value
@@ -254,7 +255,6 @@ def add_etree_variable(self, node):
254255 var = node .get_attribute (ua .AttributeIds .Historizing )
255256 if var .Value .Value :
256257 var_el .attrib ["Historizing" ] = 'true'
257- self ._add_ref_els (var_el , node )
258258
259259 def add_etree_variable_type (self , node ):
260260 """
@@ -313,7 +313,8 @@ def _add_alias_els(self):
313313 ref_el = Et .SubElement (aliases_el , 'Alias' , Alias = name )
314314 ref_el .text = nodeid .to_string ()
315315
316- self .etree .getroot ().insert (0 , aliases_el )
316+ # insert behind the namespace element
317+ self .etree .getroot ().insert (1 , aliases_el )
317318
318319 def _add_ref_els (self , parent_el , obj ):
319320 refs = obj .get_references ()
@@ -351,6 +352,8 @@ def _val_to_etree(self, el, dtype, val):
351352 elif dtype == ua .NodeId (ua .ObjectIds .Guid ):
352353 id_el = Et .SubElement (el , "uax:String" )
353354 id_el .text = str (val )
355+ elif dtype == ua .NodeId (ua .ObjectIds .Boolean ):
356+ el .text = 'true' if val else 'false'
354357 elif not hasattr (val , "ua_types" ):
355358 if isinstance (val , bytes ):
356359 el .text = val .decode ("utf-8" )
@@ -392,7 +395,7 @@ def _value_to_etree(self, el, type_name, dtype, val):
392395 if dtype_base .NamespaceIndex == 0 and dtype_base .Identifier <= 21 :
393396 type_name = ua .ObjectIdNames [dtype_base .Identifier ]
394397 val_el = Et .SubElement (el , "uax:" + type_name )
395- self ._val_to_etree (val_el , dtype , val )
398+ self ._val_to_etree (val_el , dtype_base , val )
396399 else :
397400 self ._extobj_to_etree (el , type_name , dtype , val )
398401
0 commit comments