本文整理汇总了C++中xml_document::child方法的典型用法代码示例。如果您正苦于以下问题:C++ xml_document::child方法的具体用法?C++ xml_document::child怎么用?C++ xml_document::child使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类xml_document
的用法示例。
在下文中一共展示了xml_document::child方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ftof_volumes_xml
void ftof_volumes_xml(xml_document& doc, const ForwardTOF& ftof)
{
// start building up the XML document
xml_node geom_node = doc.child("geometry");
if (!geom_node)
{
geom_node = doc.append_child("geometry");
}
xml_node dc_node = geom_node.child("forward_tof");
if (!dc_node)
{
dc_node = geom_node.append_child("forward_tof");
}
xml_node vol_node = dc_node.child("volumes");
if (!vol_node)
{
vol_node = dc_node.append_child("volumes");
}
for (auto k1 : ftof_volumes_map(ftof))
{
xml_node n1 = vol_node.append_child(k1.first.c_str());
for (auto k2 : k1.second)
{
xml_node n2 = n1.append_child(k2.first.c_str());
n2.append_child(node_pcdata).set_value(k2.second.c_str());
}
}
}
示例2: dc_core_params_xml
void dc_core_params_xml(xml_document& doc, const DriftChamber& dc, const string& units="cm")
{
double lconv = length_conversion(units);
// start building up the XML document
xml_node geom_node = doc.child("geometry");
if (!geom_node)
{
geom_node = doc.append_child("geometry");
}
xml_node dc_node = geom_node.child("drift_chamber");
if (!dc_node)
{
dc_node = geom_node.append_child("drift_chamber");
}
xml_node params_node = dc_node.append_child("core_params");
for (int nreg : vector<int>{0, 1, 2})
{
xml_node reg_node = params_node.append_child("region");
reg_node.append_attribute("index") = nreg;
for (int nslyr : vector<int>{0, 1})
{
xml_node slyr_node = reg_node.append_child("superlayer");
slyr_node.append_attribute("index") = nslyr;
slyr_node.append_attribute("wpdist") = dc.sector(0).region(nreg).superlayer(nslyr).wpdist() * lconv;
}
}
}
示例3: read_xml
/// Read & assign the object's fields from an XML DOM structure.
void stream_info_impl::read_xml(xml_document &doc) {
try {
xml_node info = doc.child("info");
// name
name_ = info.child_value("name");
if (name_.empty())
throw std::runtime_error("Received a stream info with empty <name> field.");
// type
type_ = info.child_value("type");
// channel_count
channel_count_ = lexical_cast<int>(info.child_value("channel_count"));
if (channel_count_ < 0)
throw std::runtime_error("The channel count of the given stream info is smaller than 0.");
// nominal_srate
nominal_srate_ = lexical_cast<double>(info.child_value("nominal_srate"));
if (nominal_srate_ < 0.0)
throw std::runtime_error("The sampling rate of the given stream info is negative.");
// channel_format
channel_format_ = cf_undefined;
string fmt(info.child_value("channel_format"));
if (fmt == "float32")
channel_format_ = cf_float32;
if (fmt == "double64")
channel_format_ = cf_double64;
if (fmt == "string")
channel_format_ = cf_string;
if (fmt == "int32")
channel_format_ = cf_int32;
if (fmt == "int16")
channel_format_ = cf_int16;
if (fmt == "int8")
channel_format_ = cf_int8;
if (fmt == "int64")
channel_format_ = cf_int64;
// source_id
source_id_ = info.child_value("source_id");
// version
version_ = (int)(lexical_cast<double>(info.child_value("version"))*100.0);
if (version_ <= 0)
throw std::runtime_error("The version of the given stream info is invalid.");
// created_at
created_at_ = lexical_cast<double>(info.child_value("created_at"));
// uid
uid_ = info.child_value("uid");
if (uid_.empty())
throw std::runtime_error("The UID of the given stream info is empty.");
// session_id
session_id_ = info.child_value("session_id");
// hostname
hostname_ = info.child_value("hostname");
// address
v4address_ = info.child_value("v4address");
// data_port
v4data_port_ = lexical_cast<int>(info.child_value("v4data_port"));
// service_port
v4service_port_ = lexical_cast<int>(info.child_value("v4service_port"));
// address
v6address_ = info.child_value("v6address");
// data_port
v6data_port_ = lexical_cast<int>(info.child_value("v6data_port"));
// service_port
v6service_port_ = lexical_cast<int>(info.child_value("v6service_port"));
} catch(std::exception &e) {
// reset the stream info to blank state
*this = stream_info_impl();
name_ = (string("(invalid: ") += e.what()) += ")";
}
}
示例4: ftof_panels_parms_xml
void ftof_panels_parms_xml(xml_document& doc, const ForwardTOF& ftof, const string& coordsys="clas", const string& units="cm")
{
double lconv = length_conversion(units);
if (coordsys != "sector" && coordsys != "clas")
{
throw runtime_error(string("can not generate data in ") + coordsys + " coordinates");
}
coordsys_t coord = str2coord(coordsys);
// start building up the XML document
xml_node geom_node = doc.child("geometry");
if (!geom_node)
{
geom_node = doc.append_child("geometry");
}
xml_node ftof_node = geom_node.child("forward_tof");
if (!ftof_node)
{
ftof_node = geom_node.append_child("forward_tof");
}
xml_node panels_node = ftof_node.child("panels_parms");
if (!panels_node)
{
panels_node = ftof_node.append_child("panels_parms");
panels_node.append_attribute("length_units");
panels_node.append_attribute("coordinate_system");
}
panels_node.attribute("length_units") = units.c_str();
panels_node.attribute("coordinate_system") = coordsys.c_str();
for (int sec=0; sec<ftof.sectors().size(); sec++)
{
const forward_tof::Sector& ftof_sector = ftof.sector(sec);
for (int pan=0; pan<ftof_sector.panels().size(); pan++)
{
const forward_tof::Panel& panel = ftof_sector.panel(pan);
xml_node panel_node = panels_node.append_child("panel");
panel_node.append_attribute("sector") = sec;
panel_node.append_attribute("panel") = ftof_sector.panel_name(pan).c_str();
panel_node.append_attribute("npaddles") = int(panel.npaddles());
panel_node.append_attribute("dist2tgt") = panel.dist2tgt() * lconv;
direction_vector<double,3> panel_norm = panel.panel_normal(coord);
panel_node.append_attribute("norm_phi") = panel_norm.phi();
panel_node.append_attribute("norm_theta") = panel_norm.theta();
direction_vector<double,3> paddle_dir = panel.paddle_direction(coord);
panel_node.append_attribute("paddle_phi") = paddle_dir.phi();
panel_node.append_attribute("paddle_theta") = paddle_dir.theta();
panel_node.append_attribute("paddle_width") = panel.paddle_width() * lconv;
panel_node.append_attribute("paddle_thickness") = panel.paddle_thickness() * lconv;
euclid_vector<double,3> paddle_extent = panel.paddle_extent(COORDSYS::SECTOR);
panel_node.append_attribute("paddle_extent_x") = paddle_extent.x() * lconv;
panel_node.append_attribute("paddle_extent_z") = paddle_extent.z() * lconv;
xml_node center_node = panel_node.append_child("paddle_centers");
vector<xml_node> paddle_centers_node;
paddle_centers_node.push_back(center_node.append_child("x"));
paddle_centers_node.push_back(center_node.append_child("y"));
paddle_centers_node.push_back(center_node.append_child("z"));
vector<stringstream> centers(3);
for (auto cntr : panel.paddle_centers(coord))
{
centers[0] << " " << cntr.x() * lconv;
centers[1] << " " << cntr.y() * lconv;
centers[2] << " " << cntr.z() * lconv;
}
for (int i=0; i<paddle_centers_node.size(); i++)
{
paddle_centers_node[i].append_child(pugi::node_pcdata).set_value(
centers[i].str().erase(0,1).c_str());
}
xml_node length_node = panel_node.append_child("paddle_lengths");
stringstream lengths;
for (auto lngth : panel.paddle_lengths())
{
lengths << " " << lngth;
}
length_node.append_child(pugi::node_pcdata).set_value(
lengths.str().erase(0,1).c_str());
}
}
}