xml — парсер TinyXML2 c ++ странный тег

Доброе утро всем, я должен разобрать файл XML, и я решил использовать tinyxml2. Я что-то сделал, а потом остановился, потому что не знаю, как мне это разобрать.

<report>
<file name="com.kristanix.android.mahjongsolitaireepic.apk" size="29743 KB" sha1="af054314883c177b2fd533fc907fe5492fc498db" md5="f70d0175469a417facd0e5539c15efdf"/>
<app name="com.kristanix.android.mahjongsolitaireepic.apk" package="com.kristanix.android.mahjongsolitaireepic" version="2.0" minAPI="9">
<permissions>
<permission name="factory_test" used="TRUE" required="FALSE"/>
<permission name="get_tasks" used="TRUE" required="FALSE"/>
<permission name="record_audio" used="TRUE" required="FALSE"/>
<permission name="use_credentials" used="TRUE" required="FALSE"/>
<permission name="wake_lock" used="TRUE" required="FALSE"/>
<permission name="vibrate" used="TRUE" required="FALSE"/>
<permission name="access_wifi_state" used="TRUE" required="FALSE"/>
<permission name="read_contacts" used="TRUE" required="FALSE"/>
<permission name="access_fine_location" used="TRUE" required="FALSE"/>
<permission name="access_network_state" used="TRUE" required="TRUE"/>
<permission name="internet" used="TRUE" required="TRUE"/>
</permissions>
</app>
<analysis>
<virusTotalScore>0/57</virusTotalScore>
<obfuscation>partially</obfuscation>
<appVerification>
Nothing to verify. Application is policy compliant.
</appVerification>
<codeReview>Not Available.</codeReview>
<note/>
</analysis>
</report>

Моя проблема с тегом <permissionпотому что это не дочерний элемент прав доступа, ни атрибут. Это код C ++ моего парсера

#include <stdio.h>
#include "tinyxml2.h"#include <iostream>
using namespace tinyxml2;

#ifndef XMLCheckResult
#define XMLCheckResult(a_eResult) if (a_eResult != XML_SUCCESS) { printf("Error: %i\n", a_eResult); return a_eResult; }
#endif

int main() {
//carico file
XMLDocument doc;
doc.LoadFile("test.xml");

//controllo file
XMLError eResult = doc.LoadFile("test.xml");
XMLCheckResult(eResult);

//minAPI
int minapi;
XMLElement* attributeminapi = doc.FirstChildElement("report")->FirstChildElement("app");
attributeminapi->QueryIntAttribute("minAPI", &minapi);

//virus total (è una stringa)
const char* virustot = doc.FirstChildElement("report")->FirstChildElement("analysis")->FirstChildElement("virusTotalScore")->GetText();

//obfuscation
const char* obfuscation = doc.FirstChildElement("report")->FirstChildElement("analysis")->FirstChildElement("obfuscation")->GetText();

//PERMISSIONS
//factory test
XMLElement* fact = doc.FirstChildElement("report")->FirstChildElement("permissions");
std::string str = fact->Attribute("name");

return 0;
}

Разбор разрешения дает мне ошибку. Не могли бы вы мне помочь? большое спасибо

0

Решение

Вы получаете permissions (обратите внимание на «s») контейнерный тег, который, в свою очередь, содержит много permission теги внутри.

 XMLElement* fact = doc.FirstChildElement("report")->FirstChildElement("permissions");

Тогда вы пытаетесь получить доступ к name атрибут:

std::string str = fact->Attribute("name");

Тем не мение, permissions (обратите внимание на «s» снова) не имеет никаких атрибутов, это каждый из permission элементы, которые содержат «имя». Вместо этого вы должны перебрать permission элементы внутри permissionsи получите атрибут «name» для каждого из них:

for (tinyxml2::XMLElement* child = fact->FirstChildElement(); child != NULL; child = child->NextSiblingElement())
{
std::string str = child->Attribute("name");
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]