QMCPACK
Libxml2Document Struct Reference

class that handles xmlDoc More...

+ Collaboration diagram for Libxml2Document:

Public Member Functions

 Libxml2Document ()
 
 Libxml2Document (const std::string &fname)
 
 ~Libxml2Document ()
 
void newDoc (const std::string &rootName)
 
bool parse (const std::string &fname)
 
bool parseFromString (const std::string_view data)
 
xmlDocPtr getDocument ()
 
xmlNodePtr getRoot ()
 
xmlXPathContextPtr getXPathContext ()
 
void dump (const std::string &newxml)
 
void addChild (xmlNodePtr newnode)
 
void addChild (const std::string &expression, xmlNodePtr newnode)
 
xmlNodePtr addChild (xmlNodePtr parent, const std::string &nodeName)
 
xmlNodePtr addChild (xmlNodePtr parent, const std::string &nodeName, const bool &value)
 
template<typename T >
xmlNodePtr addChild (xmlNodePtr parent, const std::string &nodeName, const T &value)
 

Public Attributes

xmlDocPtr m_doc
 
xmlNodePtr m_root
 
xmlXPathContextPtr m_context
 
std::string InFileRoot
 

Detailed Description

class that handles xmlDoc

Definition at line 76 of file Libxml2Doc.h.

Constructor & Destructor Documentation

◆ Libxml2Document() [1/2]

Definition at line 81 of file Libxml2Doc.cpp.

81 : m_doc(NULL), m_root(NULL), m_context(NULL) {}
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlNodePtr m_root
Definition: Libxml2Doc.h:116
xmlXPathContextPtr m_context
Definition: Libxml2Doc.h:117

◆ Libxml2Document() [2/2]

Libxml2Document ( const std::string &  fname)

Definition at line 83 of file Libxml2Doc.cpp.

References parse().

83 : m_doc(NULL), m_root(NULL), m_context(NULL) { parse(xmlfile); }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlNodePtr m_root
Definition: Libxml2Doc.h:116
xmlXPathContextPtr m_context
Definition: Libxml2Doc.h:117
bool parse(const std::string &fname)
Definition: Libxml2Doc.cpp:180

◆ ~Libxml2Document()

Definition at line 85 of file Libxml2Doc.cpp.

References m_context, and m_doc.

86 {
87  if (m_context != NULL)
88  xmlXPathFreeContext(m_context);
89  if (m_doc != NULL)
90  xmlFreeDoc(m_doc);
91 }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlXPathContextPtr m_context
Definition: Libxml2Doc.h:117

Member Function Documentation

◆ addChild() [1/5]

◆ addChild() [2/5]

void addChild ( const std::string &  expression,
xmlNodePtr  newnode 
)

Definition at line 117 of file Libxml2Doc.cpp.

References getXPathContext().

118 {
119  xmlXPathContextPtr acontext = getXPathContext();
120  OhmmsXPathObject res(expression.c_str(), acontext);
121  if (res.size())
122  {
123  xmlAddChild(res[0], newnode);
124  }
125 }
xmlXPathContextPtr getXPathContext()
Definition: Libxml2Doc.cpp:100
class to handle xmlXPathObject
Definition: Libxml2Doc.h:26

◆ addChild() [3/5]

xmlNodePtr addChild ( xmlNodePtr  parent,
const std::string &  nodeName 
)

Definition at line 127 of file Libxml2Doc.cpp.

References qmcplusplus::node.

128 {
129  xmlNodePtr node = xmlNewChild(parent, NULL, BAD_CAST nodeName.c_str(), NULL);
130  return node;
131 }
if(!okay) throw std xmlNodePtr node

◆ addChild() [4/5]

xmlNodePtr addChild ( xmlNodePtr  parent,
const std::string &  nodeName,
const bool &  value 
)
inline

Definition at line 99 of file Libxml2Doc.h.

References qmcplusplus::node, and qmcplusplus::Units::time::s.

100  {
101  std::string s = value ? "true" : "false";
102  xmlNodePtr node = xmlNewChild(parent, NULL, BAD_CAST nodeName.c_str(), BAD_CAST s.c_str());
103  return node;
104  }
if(!okay) throw std xmlNodePtr node

◆ addChild() [5/5]

xmlNodePtr addChild ( xmlNodePtr  parent,
const std::string &  nodeName,
const T &  value 
)
inline

Definition at line 107 of file Libxml2Doc.h.

References qmcplusplus::node, and qmcplusplus::Units::time::s.

108  {
109  std::stringstream s;
110  s << value;
111  xmlNodePtr node = xmlNewChild(parent, NULL, BAD_CAST nodeName.c_str(), BAD_CAST s.str().c_str());
112  return node;
113  }
if(!okay) throw std xmlNodePtr node

◆ dump()

void dump ( const std::string &  newxml)

Definition at line 109 of file Libxml2Doc.cpp.

References m_doc.

Referenced by main(), TEST_CASE(), and qmcplusplus::TEST_CASE().

109 { xmlSaveFormatFile(newxml.c_str(), m_doc, 1); }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115

◆ getDocument()

xmlDocPtr getDocument ( )
inline

Definition at line 87 of file Libxml2Doc.h.

References m_doc.

87 { return m_doc; }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115

◆ getRoot()

xmlNodePtr getRoot ( )
inline

Definition at line 88 of file Libxml2Doc.h.

References m_root.

Referenced by qmcplusplus::create_CN_Hamiltonian(), qmcplusplus::create_CN_particlesets(), qmcplusplus::testing::createEstimatorManagerNewGlobalInputXML(), qmcplusplus::testing::createEstimatorManagerNewInputXML(), qmcplusplus::testing::createEstimatorManagerNewVMCInputXML(), qmcplusplus::doSOECPotentialTest(), main(), MinimalWaveFunctionPool::make_diamondC_1x1x1(), MinimalParticlePool::make_H2(), MinimalHamiltonianPool::make_hamWithEE(), MinimalWaveFunctionPool::make_O2_spinor(), MinimalWaveFunctionPool::make_O2_spinor_J12(), MinimalHamiltonianPool::makeHamWithEEEI(), qmcplusplus::makeTestRPI(), SetupDMCTest::operator()(), qmcplusplus::parse_electron_ion_pbc_z(), qmcplusplus::parse_pbc_fcc_lattice(), qmcplusplus::parse_pbc_lattice(), MinimalParticlePool::parseParticleSetXML(), qmcplusplus::readCuspInfo(), qmcplusplus::setup_He_wavefunction(), qmcplusplus::setupParticleSetPool(), qmcplusplus::setupParticleSetPoolBe(), SpaceGridEnv< VALID >::SpaceGridEnv(), SpaceGridEnv< ValidSpaceGridInput::valid::CYLINDRICAL >::SpaceGridEnv(), qmcplusplus::test_C_diamond(), qmcplusplus::test_cartesian_ao(), TEST_CASE(), qmcplusplus::TEST_CASE(), qmcplusplus::test_diamond_2x1x1_xml_input(), qmcplusplus::test_dirac_ao(), qmcplusplus::test_EtOH_mw(), qmcplusplus::test_HCN(), qmcplusplus::test_hcpBe_rotation(), qmcplusplus::test_He(), qmcplusplus::test_He_mw(), qmcplusplus::test_He_sto3g_xml_input(), qmcplusplus::test_J1_spline(), qmcplusplus::test_J3_polynomial3D(), qmcplusplus::test_LCAO_DiamondC_2x1x1_cplx(), qmcplusplus::test_LCAO_DiamondC_2x1x1_real(), qmcplusplus::test_lcao_spinor(), qmcplusplus::test_lcao_spinor_excited(), qmcplusplus::test_lcao_spinor_ion_derivs(), qmcplusplus::test_LiH_msd(), qmcplusplus::test_LiH_msd_xml_input(), qmcplusplus::test_LiH_msd_xml_input_with_positron(), qmcplusplus::test_Ne(), VMCBatchedTest::testCalcDefaultLocalWalkers(), and qmcplusplus::testTrialWaveFunction_diamondC_2x1x1().

88 { return m_root; }
xmlNodePtr m_root
Definition: Libxml2Doc.h:116

◆ getXPathContext()

xmlXPathContextPtr getXPathContext ( )

◆ newDoc()

void newDoc ( const std::string &  rootName)

Definition at line 93 of file Libxml2Doc.cpp.

References m_doc, and m_root.

Referenced by qmcplusplus::testing::createEstimatorManagerNewGlobalInputXML(), qmcplusplus::testing::createEstimatorManagerNewInputXML(), qmcplusplus::testing::createEstimatorManagerNewVMCInputXML(), main(), TEST_CASE(), and qmcplusplus::TEST_CASE().

94 {
95  m_doc = xmlNewDoc(BAD_CAST "1.0");
96  m_root = xmlNewNode(NULL, BAD_CAST rootName.c_str());
97  xmlDocSetRootElement(m_doc, m_root);
98 }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlNodePtr m_root
Definition: Libxml2Doc.h:116

◆ parse()

bool parse ( const std::string &  fname)

Definition at line 180 of file Libxml2Doc.cpp.

References InFileRoot, m_doc, and m_root.

Referenced by Libxml2Document(), QMCAppBase::pushDocument(), qmcplusplus::readCuspInfo(), qmcplusplus::test_C_diamond(), qmcplusplus::test_cartesian_ao(), TEST_CASE(), qmcplusplus::TEST_CASE(), qmcplusplus::test_dirac_ao(), qmcplusplus::test_EtOH_mw(), qmcplusplus::test_HCN(), qmcplusplus::test_He(), qmcplusplus::test_He_mw(), and qmcplusplus::test_Ne().

181 {
182  if (m_doc != NULL)
183  xmlFreeDoc(m_doc);
184 
185  // read xml document w/o memory limits
186  // note that XML_PARSE_HUGE is part of an enum in libxml2
187  // it is only available in libxml 2.7+
188  m_doc = xmlReadFile(xmlfile.c_str(), NULL, XML_PARSE_HUGE);
189  //m_doc = xmlParseFile(xmlfile.c_str());
190 
191  if (m_doc == NULL)
192  {
193  return false;
194  }
195  m_root = xmlDocGetRootElement(m_doc);
196  if (m_root == NULL)
197  {
198  return false;
199  }
200  InFileRoot = std::string(xmlfile, 0, xmlfile.size() - 4);
201  return true;
202 }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlNodePtr m_root
Definition: Libxml2Doc.h:116
std::string InFileRoot
Definition: Libxml2Doc.h:118

◆ parseFromString()

bool parseFromString ( const std::string_view  data)

Definition at line 204 of file Libxml2Doc.cpp.

References InFileRoot, m_doc, and m_root.

Referenced by qmcplusplus::create_CN_Hamiltonian(), qmcplusplus::create_CN_particlesets(), qmcplusplus::testing::createEstimatorManagerNewGlobalInputXML(), qmcplusplus::testing::createEstimatorManagerNewInputXML(), qmcplusplus::testing::createEstimatorManagerNewVMCInputXML(), qmcplusplus::doSOECPotentialTest(), MinimalWaveFunctionPool::make_diamondC_1x1x1(), MinimalParticlePool::make_H2(), MinimalHamiltonianPool::make_hamWithEE(), MinimalWaveFunctionPool::make_O2_spinor(), MinimalWaveFunctionPool::make_O2_spinor_J12(), MinimalHamiltonianPool::makeHamWithEEEI(), qmcplusplus::makeTestRPI(), SetupDMCTest::operator()(), qmcplusplus::parse_electron_ion_pbc_z(), qmcplusplus::parse_pbc_fcc_lattice(), qmcplusplus::parse_pbc_lattice(), MinimalParticlePool::parseParticleSetXML(), qmcplusplus::setup_He_wavefunction(), qmcplusplus::setupParticleSetPool(), qmcplusplus::setupParticleSetPoolBe(), SpaceGridEnv< VALID >::SpaceGridEnv(), SpaceGridEnv< ValidSpaceGridInput::valid::CYLINDRICAL >::SpaceGridEnv(), TEST_CASE(), qmcplusplus::TEST_CASE(), qmcplusplus::test_diamond_2x1x1_xml_input(), qmcplusplus::test_hcpBe_rotation(), qmcplusplus::test_He_sto3g_xml_input(), qmcplusplus::test_J1_spline(), qmcplusplus::test_J3_polynomial3D(), qmcplusplus::test_LCAO_DiamondC_2x1x1_cplx(), qmcplusplus::test_LCAO_DiamondC_2x1x1_real(), qmcplusplus::test_lcao_spinor(), qmcplusplus::test_lcao_spinor_excited(), qmcplusplus::test_lcao_spinor_ion_derivs(), qmcplusplus::test_LiH_msd(), qmcplusplus::test_LiH_msd_xml_input(), qmcplusplus::test_LiH_msd_xml_input_with_positron(), VMCBatchedTest::testCalcDefaultLocalWalkers(), and qmcplusplus::testTrialWaveFunction_diamondC_2x1x1().

205 {
206  if (m_doc != NULL)
207  xmlFreeDoc(m_doc);
208 
209  // read xml document w/o memory limits
210  // note that XML_PARSE_HUGE is part of an enum in libxml2
211  // it is only available in libxml 2.7+
212  m_doc = xmlReadMemory(data.data(), data.length(), NULL, NULL, XML_PARSE_HUGE);
213 
214  if (m_doc == NULL)
215  {
216  return false;
217  }
218  m_root = xmlDocGetRootElement(m_doc);
219  if (m_root == NULL)
220  {
221  return false;
222  }
223  InFileRoot = std::string("string");
224  return true;
225 }
xmlDocPtr m_doc
Definition: Libxml2Doc.h:115
xmlNodePtr m_root
Definition: Libxml2Doc.h:116
std::string InFileRoot
Definition: Libxml2Doc.h:118

Member Data Documentation

◆ InFileRoot

std::string InFileRoot

Definition at line 118 of file Libxml2Doc.h.

Referenced by parse(), and parseFromString().

◆ m_context

xmlXPathContextPtr m_context

Definition at line 117 of file Libxml2Doc.h.

Referenced by getXPathContext(), and ~Libxml2Document().

◆ m_doc

xmlDocPtr m_doc

◆ m_root

xmlNodePtr m_root

Definition at line 116 of file Libxml2Doc.h.

Referenced by addChild(), getRoot(), newDoc(), parse(), and parseFromString().


The documentation for this struct was generated from the following files: