Procházet zdrojové kódy

xml-parser: ensure that traverse-collectors are only collecting xmlnodes.

Kim Kulling před 5 roky
rodič
revize
0c05398602
2 změnil soubory, kde provedl 8 přidání a 3 odebrání
  1. 3 3
      include/assimp/XmlParser.h
  2. 5 0
      test/unit/Common/utXmlParser.cpp

+ 3 - 3
include/assimp/XmlParser.h

@@ -235,11 +235,11 @@ public:
     }
     }
 
 
     void collectChildrenPreOrder( XmlNode &node ) {
     void collectChildrenPreOrder( XmlNode &node ) {
-        if (node != mParent) {
-            std::string name = node.name();
+        
+        if (node != mParent && node.type() == pugi::node_element) {
             mNodes.push_back(node);
             mNodes.push_back(node);
         }
         }
-        for (XmlNode currentNode = node.first_child(); currentNode; currentNode = currentNode.next_sibling()) {
+        for (XmlNode currentNode : node.children()) {
             collectChildrenPreOrder(currentNode);
             collectChildrenPreOrder(currentNode);
         }
         }
     }
     }

+ 5 - 0
test/unit/Common/utXmlParser.cpp

@@ -85,4 +85,9 @@ TEST_F(utXmlParser, parse_xml_and_traverse_test) {
     bool empty = nodeIt.isEmpty();
     bool empty = nodeIt.isEmpty();
     EXPECT_FALSE(empty);
     EXPECT_FALSE(empty);
     EXPECT_NE(numNodes, 0U);
     EXPECT_NE(numNodes, 0U);
+    XmlNode node;
+    while (nodeIt.getNext(node)) {
+        const std::string nodeName = node.name();
+        EXPECT_FALSE(nodeName.empty());
+    }
 }
 }