| 70 | } |
| 71 | |
| 72 | static void vtkXMLTreeReaderProcessElement( |
| 73 | vtkMutableDirectedGraph* tree, vtkIdType parent, xmlNode* node, int readCharData, int maskArrays) |
| 74 | { |
| 75 | vtkDataSetAttributes* data = tree->GetVertexData(); |
| 76 | vtkStringArray* nameArr = |
| 77 | vtkArrayDownCast<vtkStringArray>(data->GetAbstractArray(vtkXMLTreeReader::TagNameField)); |
| 78 | vtkStdString content; |
| 79 | for (xmlNode* curNode = node; curNode; curNode = curNode->next) |
| 80 | { |
| 81 | // std::cerr << "type=" << curNode->type << ",name=" << curNode->name << endl; |
| 82 | if (curNode->content) |
| 83 | { |
| 84 | const char* curContent = reinterpret_cast<const char*>(curNode->content); |
| 85 | content += curContent; |
| 86 | // std::cerr << "content=" << curNode->content << endl; |
| 87 | } |
| 88 | |
| 89 | if (curNode->type != XML_ELEMENT_NODE) |
| 90 | { |
| 91 | continue; |
| 92 | } |
| 93 | |
| 94 | vtkIdType vertex = tree->AddVertex(); |
| 95 | if (parent != -1) |
| 96 | { |
| 97 | tree->AddEdge(parent, vertex); |
| 98 | } |
| 99 | |
| 100 | // Append the node tag and character data to the vtkPointData |
| 101 | if (nameArr) // If the reader has ReadTagName = ON then populate this array |
| 102 | { |
| 103 | nameArr->InsertValue(vertex, reinterpret_cast<const char*>(curNode->name)); |
| 104 | } |
| 105 | |
| 106 | // Append the element attributes to the vtkPointData |
| 107 | for (xmlAttr* curAttr = curNode->properties; curAttr; curAttr = curAttr->next) |
| 108 | { |
| 109 | const char* name = reinterpret_cast<const char*>(curAttr->name); |
| 110 | int len = static_cast<int>(strlen(name)); |
| 111 | char* validName = new char[len + 8]; |
| 112 | strcpy(validName, ".valid."); |
| 113 | strcat(validName, name); |
| 114 | vtkStringArray* stringArr = vtkArrayDownCast<vtkStringArray>(data->GetAbstractArray(name)); |
| 115 | vtkBitArray* bitArr = nullptr; |
| 116 | if (maskArrays) |
| 117 | { |
| 118 | bitArr = vtkArrayDownCast<vtkBitArray>(data->GetAbstractArray(validName)); |
| 119 | } |
| 120 | if (!stringArr) |
| 121 | { |
| 122 | stringArr = vtkStringArray::New(); |
| 123 | stringArr->SetName(name); |
| 124 | data->AddArray(stringArr); |
| 125 | stringArr->Delete(); |
| 126 | if (maskArrays) |
| 127 | { |
| 128 | bitArr = vtkBitArray::New(); |
| 129 | bitArr->SetName(validName); |
no test coverage detected