本文整理汇总了C++中XMLNode::GetElementsByName方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLNode::GetElementsByName方法的具体用法?C++ XMLNode::GetElementsByName怎么用?C++ XMLNode::GetElementsByName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XMLNode
的用法示例。
在下文中一共展示了XMLNode::GetElementsByName方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: XLIFFFile
XLIFFFile*
XLIFFFile::Parse(const string& filename)
{
XLIFFFile* result = new XLIFFFile();
XMLNode* root = NodeHandler::ParseFile(filename, XMLNode::PRETTY);
if (root == NULL) {
return NULL;
}
// <file>
vector<XMLNode*> files = root->GetElementsByName(XLIFF_XMLNS, "file");
for (size_t i=0; i<files.size(); i++) {
XMLNode* file = files[i];
string datatype = file->GetAttribute("", "datatype", "");
string originalFile = file->GetAttribute("", "original", "");
Configuration sourceConfig;
sourceConfig.locale = file->GetAttribute("", "source-language", "");
result->m_sourceConfig = sourceConfig;
Configuration targetConfig;
targetConfig.locale = file->GetAttribute("", "target-language", "");
result->m_targetConfig = targetConfig;
result->m_currentVersion = file->GetAttribute("", "build-num", "");
result->m_oldVersion = "old";
// <body>
XMLNode* body = get_unique_node(file, XLIFF_XMLNS, "body", true);
if (body == NULL) continue;
// <trans-unit>
vector<XMLNode*> transUnits = body->GetElementsByName(XLIFF_XMLNS, "trans-unit");
for (size_t j=0; j<transUnits.size(); j++) {
XMLNode* transUnit = transUnits[j];
string rawID = transUnit->GetAttribute("", "id", "");
if (rawID == "") {
transUnit->Position().Error("<trans-unit> tag requires an id");
continue;
}
string id;
int index;
if (!StringResource::ParseTypedID(rawID, &id, &index)) {
transUnit->Position().Error("<trans-unit> has invalid id '%s'\n", rawID.c_str());
continue;
}
// <source>
XMLNode* source = get_unique_node(transUnit, XLIFF_XMLNS, "source", false);
if (source != NULL) {
XMLNode* node = source->Clone();
node->SetPrettyRecursive(XMLNode::EXACT);
result->AddStringResource(StringResource(source->Position(), originalFile,
sourceConfig, id, index, node, CURRENT_VERSION,
result->m_currentVersion));
}
// <target>
XMLNode* target = get_unique_node(transUnit, XLIFF_XMLNS, "target", false);
if (target != NULL) {
XMLNode* node = target->Clone();
node->SetPrettyRecursive(XMLNode::EXACT);
result->AddStringResource(StringResource(target->Position(), originalFile,
targetConfig, id, index, node, CURRENT_VERSION,
result->m_currentVersion));
}
// <alt-trans>
XMLNode* altTrans = get_unique_node(transUnit, XLIFF_XMLNS, "alt-trans", false);
if (altTrans != NULL) {
// <source>
XMLNode* altSource = get_unique_node(altTrans, XLIFF_XMLNS, "source", false);
if (altSource != NULL) {
XMLNode* node = altSource->Clone();
node->SetPrettyRecursive(XMLNode::EXACT);
result->AddStringResource(StringResource(altSource->Position(),
originalFile, sourceConfig, id, index, node, OLD_VERSION,
result->m_oldVersion));
}
// <target>
XMLNode* altTarget = get_unique_node(altTrans, XLIFF_XMLNS, "target", false);
if (altTarget != NULL) {
XMLNode* node = altTarget->Clone();
node->SetPrettyRecursive(XMLNode::EXACT);
result->AddStringResource(StringResource(altTarget->Position(),
originalFile, targetConfig, id, index, node, OLD_VERSION,
result->m_oldVersion));
}
}
}
}
delete root;
return result;
}
示例2: SourcePos
int
read_settings(const string& filename, map<string,Settings>* result, const string& rootDir)
{
XMLNode* root = NodeHandler::ParseFile(filename, XMLNode::PRETTY);
if (root == NULL) {
SourcePos(filename, -1).Error("Error reading file.");
return 1;
}
// <configuration>
vector<XMLNode*> configNodes = root->GetElementsByName("", "configuration");
const size_t I = configNodes.size();
for (size_t i=0; i<I; i++) {
const XMLNode* configNode = configNodes[i];
Settings settings;
settings.id = configNode->GetAttribute("", "id", "");
if (settings.id == "") {
configNode->Position().Error("<configuration> needs an id attribute.");
delete root;
return 1;
}
settings.oldVersion = configNode->GetAttribute("", "old-cl", "");
settings.currentVersion = configNode->GetAttribute("", "new-cl", "");
if (settings.currentVersion == "") {
configNode->Position().Error("<configuration> needs a new-cl attribute.");
delete root;
return 1;
}
// <app>
vector<XMLNode*> appNodes = configNode->GetElementsByName("", "app");
const size_t J = appNodes.size();
for (size_t j=0; j<J; j++) {
const XMLNode* appNode = appNodes[j];
string dir = appNode->GetAttribute("", "dir", "");
if (dir == "") {
appNode->Position().Error("<app> needs a dir attribute.");
delete root;
return 1;
}
settings.apps.push_back(dir);
}
// <reject>
vector<XMLNode*> rejectNodes = configNode->GetElementsByName("", "reject");
const size_t K = rejectNodes.size();
for (size_t k=0; k<K; k++) {
const XMLNode* rejectNode = rejectNodes[k];
Reject reject;
reject.file = rejectNode->GetAttribute("", "file", "");
if (reject.file == "") {
rejectNode->Position().Error("<reject> needs a file attribute.");
delete root;
return 1;
}
string f = reject.file;
reject.file = rootDir;
reject.file += '/';
reject.file += f;
reject.name = rejectNode->GetAttribute("", "name", "");
if (reject.name == "") {
rejectNode->Position().Error("<reject> needs a name attribute.");
delete root;
return 1;
}
reject.comment = trim_string(rejectNode->CollapseTextContents());
settings.reject.push_back(reject);
}
(*result)[settings.id] = settings;
}
delete root;
return 0;
}