本文整理汇总了C++中XMLNode::Path方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLNode::Path方法的具体用法?C++ XMLNode::Path怎么用?C++ XMLNode::Path使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XMLNode
的用法示例。
在下文中一共展示了XMLNode::Path方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: stat
bool CREAMClient::stat(const std::string& jobid, Job& job) {
logger.msg(VERBOSE, "Creating and sending a status request");
action = "JobInfo";
PayloadSOAP req(cream_ns);
XMLNode xjobId = req.NewChild("types:" + action + "Request").NewChild("types:jobId");
xjobId.NewChild("types:id") = jobid;
xjobId.NewChild("types:creamURL") = client->GetURL().str();
XMLNode response;
if (!process(req, response)) return false;
XMLNode jobInfoNode;
jobInfoNode = response["result"]["jobInfo"];
XMLNode lastStatusNode = jobInfoNode.Path("status").back();
if (lastStatusNode["name"]) {
job.State = JobStateCREAM((std::string)lastStatusNode["name"]);
}
if (lastStatusNode["failureReason"]) {
job.Error.push_back((std::string)lastStatusNode["failureReason"]);
}
if (!job.State) {
logger.msg(VERBOSE, "Unable to retrieve job status.");
return false;
}
if (ISVALID(jobInfoNode["jobId"]["id"])) {
job.IDFromEndpoint = (std::string)jobInfoNode["jobId"]["id"];
}
if (ISVALID(jobInfoNode["type"]))
job.Type = (std::string)jobInfoNode["type"];
if (ISVALID(jobInfoNode["JDL"])) {
job.JobDescription = "egee:jdl";
job.JobDescriptionDocument = (std::string)jobInfoNode["JDL"];
std::list<JobDescription> jds;
if (JobDescription::Parse(job.JobDescriptionDocument, jds) && !jds.empty()) {
if (!jds.front().Application.Input.empty())
job.StdIn = jds.front().Application.Input;
if (!jds.front().Application.Output.empty())
job.StdOut = jds.front().Application.Output;
if (!jds.front().Application.Error.empty())
job.StdErr = jds.front().Application.Error;
if (!jds.front().Resources.QueueName.empty()) {
job.Queue = jds.front().Resources.QueueName;
}
}
}
if (ISVALID(lastStatusNode["exitCode"]))
job.ExitCode = stringtoi((std::string)lastStatusNode["exitCode"]);
if (ISVALID(jobInfoNode["delegationProxyInfo"])) {
/* Format of delegationProxyInfo node.
[ isRFC="<true|false>";
valid from="<mon>/<date>/<yy> <hour>:<min> <AM|PM> (<timezone>)";
valid to="<mon>/<date>/<yy> <hour>:<min> <AM|PM> (<timezone>)";
holder DN="<DN>";
holder AC issuer="<DN>";
VO="<VO-name>";
AC issuer="<DN>";
VOMS attributes=<VOMS-Attributes>
]
*/
std::string delegationProxy = (std::string)jobInfoNode["delegationProxyInfo"];
std::size_t lBracketPos = delegationProxy.find('['), rBracketPos = delegationProxy.rfind(']');
if (lBracketPos != std::string::npos && rBracketPos != std::string::npos) {
delegationProxy = trim(delegationProxy.substr(lBracketPos, rBracketPos - lBracketPos));
}
std::list<std::string> tDelegInfo;
tokenize(delegationProxy, tDelegInfo, ";");
for (std::list<std::string>::iterator it = tDelegInfo.begin();
it != tDelegInfo.end(); ++it) {
std::list<std::string> keyValuePair;
tokenize(*it, keyValuePair, "=", "\"", "\"");
if (keyValuePair.size() != 2) continue;
if (lower(trim(keyValuePair.front())) == "holder dn") job.Owner = trim(keyValuePair.back(), " \"");
if (lower(trim(keyValuePair.front())) == "valid to") stringtoTime(trim(keyValuePair.back(), " \""), job.ProxyExpirationTime);
}
}
if (ISVALID(jobInfoNode["localUser"]))
job.LocalOwner = (std::string)jobInfoNode["localUser"];
if (ISVALID(jobInfoNode["lastCommand"])) {
int job_register_id_first = -1;
int job_register_id_last = -1;
int job_start_id_first = -1;
int job_start_id_last = -1;
int local_id = 0;
while (true) {
if (!jobInfoNode["lastCommand"][local_id])
break;
if ((std::string)jobInfoNode["lastCommand"][local_id]["name"] == "JOB_REGISTER") {
if (job_register_id_first == -1 && job_register_id_last == -1) {
job_register_id_first = local_id;
//.........这里部分代码省略.........