Pārlūkot izejas kodu

Allow empty-element tag for base attributes (#679)

* Allow empty-element tag for base attributes 

Allow empty-element tags for base attributes in node XMLs.

Some tools create node XML with empty elements like *<Description/>*.

open62541 should be able to handle this cause they are valid XML documents

example:
```
<UAReferenceType NodeId="ns=1;i=4001" BrowseName="1:providesInputTo">
        <DisplayName>providesInputTo</DisplayName>
        <References>
            <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
        </References>
        <InverseName/>
    </UAReferenceType>
```

* Fix #679
Markus Graube 8 gadi atpakaļ
vecāks
revīzija
2e2890a695
1 mainītis faili ar 18 papildinājumiem un 17 dzēšanām
  1. 18 17
      tools/pyUANamespace/ua_node_types.py

+ 18 - 17
tools/pyUANamespace/ua_node_types.py

@@ -608,22 +608,23 @@ class opcua_node_t:
 
     for x in thisxml.childNodes:
       if x.nodeType == x.ELEMENT_NODE:
-        if   x.tagName == "BrowseName":
-          self.browseName(unicode(x.firstChild.data))
-          xmlelement.removeChild(x)
-        elif x.tagName == "DisplayName":
-          self.displayName(unicode(x.firstChild.data))
-          xmlelement.removeChild(x)
-        elif x.tagName == "Description":
-          self.description(unicode(x.firstChild.data))
-          xmlelement.removeChild(x)
-        elif x.tagName == "WriteMask":
-          self.writeMask(int(unicode(x.firstChild.data)))
-          xmlelement.removeChild(x)
-        elif x.tagName == "UserWriteMask":
-          self.userWriteMask(int(unicode(x.firstChild.data)))
-          xmlelement.removeChild(x)
-        elif x.tagName == "References":
+        if x.firstChild:
+          if   x.tagName == "BrowseName":
+            self.browseName(unicode(x.firstChild.data))
+            xmlelement.removeChild(x)
+          elif x.tagName == "DisplayName":
+            self.displayName(unicode(x.firstChild.data))
+            xmlelement.removeChild(x)
+          elif x.tagName == "Description":
+            self.description(unicode(x.firstChild.data))
+            xmlelement.removeChild(x)
+          elif x.tagName == "WriteMask":
+            self.writeMask(int(unicode(x.firstChild.data)))
+            xmlelement.removeChild(x)
+          elif x.tagName == "UserWriteMask":
+            self.userWriteMask(int(unicode(x.firstChild.data)))
+            xmlelement.removeChild(x)
+        if x.tagName == "References":
           self.initiateDummyXMLReferences(x)
           xmlelement.removeChild(x)
     self.parseXMLSubType(xmlelement)
@@ -801,7 +802,7 @@ class opcua_node_referenceType_t(opcua_node_t):
 
     for x in xmlelement.childNodes:
       if x.nodeType == x.ELEMENT_NODE:
-        if x.tagName == "InverseName":
+        if x.tagName == "InverseName" and x.firstChild:
           self.inverseName(str(unicode(x.firstChild.data)))
         else:
           logger.warn( "Unprocessable XML Element: " + x.tagName)