/*========================================================================= Program: Visualization Toolkit Module: vtkXMLTreeReader.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /*------------------------------------------------------------------------- Copyright 2008 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. -------------------------------------------------------------------------*/ /** * @class vtkXMLTreeReader * @brief reads an XML file into a vtkTree * * * vtkXMLTreeReader parses an XML file and uses the nesting structure of the * XML tags to generate a tree. Node attributes are assigned to node arrays, * and the special arrays .tagname and .chardata contain the tag type and the * text internal to the tag, respectively. The arrays are of type * vtkStringArray. There is an array for each attribute type in the XML file, * even if it appears in only one tag. If an attribute is missing from a tag, * its value is the empty string. * * If MaskArrays is on (the default is off), the filter will additionally make bit * arrays whose names are prepended with ".valid." which are 1 if the element * contains that attribute, and 0 otherwise. * * For example, the XML file containing the text: *
 * <node name="jeff" age="26">
 *   this is text in jeff's node
 *   <node name="joe">
 *     <node name="al" initials="amb" other="something"/>
 *     <node name="dave" age="30"/>
 *   </node>
 *   <node name="lisa">this is text in lisa's node</node>
 *   <node name="darlene" age="29"/>
 * </node>
 * 
* * would be parsed into a tree with the following node IDs and structure: * *
 * 0 (jeff) - children: 1 (joe), 4 (lisa), 5 (darlene)
 * 1 (joe)  - children: 2 (al), 3 (dave)
 * 2 (al)
 * 3 (dave)
 * 4 (lisa)
 * 5 (darlene)
 * 
* * and the node data arrays would be as follows: * *
 * name      initials  other     age       .tagname  .chardata
 * ------------------------------------------------------------------------------------------------
 * jeff      (empty)   (empty)   26         node     "  this is text in jeff's node\n  \n  \n  \n"
 * joe       (empty)   (empty)   (empty)    node     "\n    \n    \n  "
 * al        amb       something (empty)    node     (empty)
 * dave      (empty)   (empty)   30         node     (empty)
 * lisa      (empty)   (empty)   (empty)    node     "this is text in lisa's node"
 * darlene   (empty)   (empty)   29         node     (empty)
 * 
* * There would also be the following bit arrays if MaskArrays is on: * *
 * .valid.name   .valid.initials   .valid.other   .valid.age
 * ---------------------------------------------------------
 * 1             0                 0              1
 * 1             0                 0              0
 * 1             1                 1              0
 * 1             0                 0              1
 * 1             0                 0              0
 * 1             0                 0              1
 * 
*/ #ifndef vtkXMLTreeReader_h #define vtkXMLTreeReader_h #include "vtkIOInfovisModule.h" // For export macro #include "vtkTreeAlgorithm.h" class VTKIOINFOVIS_EXPORT vtkXMLTreeReader : public vtkTreeAlgorithm { public: static vtkXMLTreeReader* New(); vtkTypeMacro(vtkXMLTreeReader, vtkTreeAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; //@{ /** * If set, reads in the XML file specified. */ vtkGetStringMacro(FileName); vtkSetStringMacro(FileName); //@} //@{ /** * If set, and FileName is not set, reads in the XML string. */ vtkGetStringMacro(XMLString); vtkSetStringMacro(XMLString); //@} //@{ /** * The name of the edge pedigree ids. Default is "edge id". */ vtkGetStringMacro(EdgePedigreeIdArrayName); vtkSetStringMacro(EdgePedigreeIdArrayName); //@} //@{ /** * The name of the vertex pedigree ids. Default is "vertex id". */ vtkGetStringMacro(VertexPedigreeIdArrayName); vtkSetStringMacro(VertexPedigreeIdArrayName); //@} //@{ /** * Set whether to use an property from the XML file as pedigree ids (off), * or generate a new array with integer values starting at zero (on). * Default is on. */ vtkSetMacro(GenerateEdgePedigreeIds, bool); vtkGetMacro(GenerateEdgePedigreeIds, bool); vtkBooleanMacro(GenerateEdgePedigreeIds, bool); vtkSetMacro(GenerateVertexPedigreeIds, bool); vtkGetMacro(GenerateVertexPedigreeIds, bool); vtkBooleanMacro(GenerateVertexPedigreeIds, bool); //@} //@{ /** * If on, makes bit arrays for each attribute with name .valid.attribute_name * for each attribute. Default is off. */ vtkGetMacro(MaskArrays, bool); vtkSetMacro(MaskArrays, bool); vtkBooleanMacro(MaskArrays, bool); //@} //@{ /** * If on, stores the XML character data (i.e. textual data between tags) * into an array named CharDataField, otherwise this field is skipped. * Default is off. */ vtkGetMacro(ReadCharData, bool); vtkSetMacro(ReadCharData, bool); vtkBooleanMacro(ReadCharData, bool); //@} //@{ /** * If on, stores the XML tag name data in a field called .tagname * otherwise this field is skipped. * Default is on. */ vtkGetMacro(ReadTagName, bool); vtkSetMacro(ReadTagName, bool); vtkBooleanMacro(ReadTagName, bool); //@} static const char* TagNameField; static const char* CharDataField; protected: vtkXMLTreeReader(); ~vtkXMLTreeReader() override; char* FileName; char* XMLString; bool ReadCharData; bool ReadTagName; bool MaskArrays; char* EdgePedigreeIdArrayName; char* VertexPedigreeIdArrayName; bool GenerateEdgePedigreeIds; bool GenerateVertexPedigreeIds; int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; private: vtkXMLTreeReader(const vtkXMLTreeReader&) = delete; void operator=(const vtkXMLTreeReader&) = delete; }; #endif