XML循环遍历C ++ / CLI中的所有子级和子级

SGCSam

此刻,我正在使用XML来创建一个包含许多问题的数据结构,以用于包含测验的信息,例如问题本身,答案等信息,然后将这些问题放入变量中以在标签中显示。这是XML文件的示例:

<?xml version="1.0" encoding="utf-8"?>
<questionData>
    <question>
    <level> 1 </level>
    <ref> ref1 </ref>
    <questionText>This is a test question using XML!</questionText>
    <A>This is A using XML!</A>
    <B>This is B using XML!</B>
    <C>This is C using XML!</C>
    <D>This is D using XML!</D>
    <corrAnswer> A </corrAnswer>
    <APerc> 97 </APerc>
    <BPerc> 1 </BPerc>
    <CPerc> 1 </CPerc>
    <DPerc> 1 </DPerc>
    <PAFAnswer> A </PAFAnswer>
    <PAFFeeling> Sure </PAFFeeling>
    <FF> B </FF>
    <FFcorrPerc> 100 </FFcorrPerc>
    <FFwrongPerc> 0 </FFwrongPerc>
    <FFPAFAnswer> A </FFPAFAnswer>
    <FFPAFFeeling> Sure </FFPAFFeeling>
    <EXP> This is a test explanation for the info box. </EXP>
    <pronuns> pro-nun-cee-a-sh-un </pronuns>
    </question>

    <question>
    <level> 2 </level>
    <ref> ref2 </ref>
    <questionText>This is another test question using XML!</questionText>
    <A>This is A2 using XML!</A>
    <B>This is B2 using XML!</B>
    <C>This is C2 using XML!</C>
    <D>This is D2 using XML!</D>
    <corrAnswer> B </corrAnswer>
    <APerc> 96 </APerc>
    <BPerc> 1 </BPerc>
    <CPerc> 1 </CPerc>
    <DPerc> 2 </DPerc>
    <PAFAnswer> B </PAFAnswer>
    <PAFFeeling> Sure </PAFFeeling>
    <FF> A </FF>
    <FFcorrPerc> 100 </FFcorrPerc>
    <FFwrongPerc> 0 </FFwrongPerc>
    <FFPAFAnswer> B </FFPAFAnswer>
    <FFPAFFeeling> Sure </FFPAFFeeling>
    <EXP> This is another test explanation for the info box. </EXP>
    <pronuns> pro-nun-cee-a-sh-un two </pronuns>
    </question>
</questionData>

现在,我打算在此文件中包含很多问题。但是,您的测验越深入,难度就越大,因此,我加入了一个称为关卡的元素,并带有一个数字,该数字与被问到的时间相对应(例如,您在测验中有15个问题,您正在质疑3,因此它将XML文件解析为级别元素为3的问题,然后将数据加载到程序中。

但是,有一个问题-最有可能是逻辑错误。在C ++ / CLI代码中,我有以下内容:

         XmlTextReader^ dataFromQFile = gcnew XmlTextReader("Millionaire\\questionsData.xml");
         XmlDocument^ questionsData = gcnew XmlDocument();
         questionsData->Load("Millionaire\\questionsData.xml");
         XmlElement^ root = questionsData->DocumentElement;
         XmlNodeList^ listOfQuestions = root->GetElementsByTagName("questionData");
         XmlNodeList^ Questions = root->GetElementsByTagName("question");

         for each (Questions in listOfQuestions)
         {
             levelFromXML = (root->GetElementsByTagName("level"))->Item(0)->InnerText;
             questionFromXML = (root->GetElementsByTagName("questionText"))->Item(0)->InnerText;
             AFromXML = (root->GetElementsByTagName("A"))->Item(0)->InnerText;
             BFromXML = (root->GetElementsByTagName("B"))->Item(0)->InnerText;
             CFromXML = (root->GetElementsByTagName("C"))->Item(0)->InnerText;
             DFromXML = (root->GetElementsByTagName("D"))->Item(0)->InnerText;
             corrFromXML = (root->GetElementsByTagName("corrAnswer"))->Item(0)->InnerText;
             APercFromXML = (root->GetElementsByTagName("APerc"))->Item(0)->InnerText;
             BPercFromXML = (root->GetElementsByTagName("BPerc"))->Item(0)->InnerText;
             CPercFromXML = (root->GetElementsByTagName("CPerc"))->Item(0)->InnerText;
             DPercFromXML = (root->GetElementsByTagName("DPerc"))->Item(0)->InnerText;
             phoneAnswerFromXML = (root->GetElementsByTagName("PAFAnswer"))->Item(0)->InnerText;
             phoneFeelingFromXML = (root->GetElementsByTagName("PAFFeeling"))->Item(0)->InnerText;
             fiftyAnswer = (root->GetElementsByTagName("FF"))->Item(0)->InnerText;
             fiftyCorrPerc = (root->GetElementsByTagName("FFcorrPerc"))->Item(0)->InnerText;
             fiftyWrongPerc = (root->GetElementsByTagName("FFwrongPerc"))->Item(0)->InnerText;
             fiftyPhoneAnswer = (root->GetElementsByTagName("FFPAFAnswer"))->Item(0)->InnerText;
             fiftyPhoneFeeling = (root->GetElementsByTagName("FFPAFFeeling"))->Item(0)->InnerText;
             exp = (root->GetElementsByTagName("EXP"))->Item(0)->InnerText;
             pronuns = (root->GetElementsByTagName("pronuns"))->Item(0)->InnerText;
         }

当我尝试遍历问题列表时(questionData是父级,问题是子级,而问题中包含的所有数据是子级子),当我尝试在标签中显示变量时,我什么都没有得到,因此使我相信我在循环中犯了一个逻辑错误。我对XML相对较新,因此无法发现错误。你们中的任何人都可以帮助我,或者可能知道更有效的方法来执行上述任务吗?谢谢。

马丁·霍恩(Martin Honnen)

您的根元素(分别是documentElement)已经是该questionData元素,因此root->GetElementsByTagName("questionData")返回空列表。如果要处理question循环中的元素,则只需进行处理for each(question in questionsData->GetElementsByTagName("question")),然后在循环内部进行操作,请确保在循环变量上调用方法,例如levelFromXML = (question->GetElementsByTagName("level"))->Item(0)->InnerText;

我还将使用https://msdn.microsoft.com/zh-cn/library/sss31aas%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1代替中GetElementsByTagName环内,所以你可以简单地替换上面的代码片段levelFromXML = question["level"]->InnerText;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Scala获取XML文件的所有子级和子级

来自分类Dev

遍历SKNode的所有子级?

来自分类Dev

在WPF中循环遍历StackPanel子级

来自分类Dev

c-仅当所有子级都终止时,waitpid()和co才检测到子级终止吗?

来自分类Dev

递归函数未遍历所有子级

来自分类Dev

从Groovy xml节点中删除所有子级

来自分类Dev

jQuery子级循环XML

来自分类Dev

jQuery子级循环XML

来自分类Dev

在C#中递归获取SAP Gui Session的所有子级

来自分类Dev

c ++随机数并在处理时等待所有子级的父级

来自分类Dev

遍历n级父级子级列表C#

来自分类Dev

在ElementTree中检查XML Element是否有子级

来自分类Dev

遍历Firebase中的快照子级

来自分类Dev

使用xmlstarlet遍历xml并输出父级和子级节点值

来自分类Dev

使用xmlstarlet遍历xml并输出父级和子级节点值

来自分类Dev

摆脱MYSQL中的循环父级/子级

来自分类Dev

将所有没有子级的XML元素转换为父级元素的XML属性

来自分类Dev

跟踪XML子级

来自分类Dev

Python与ElementTree在同一循环中获取XML的父级和子级值

来自分类Dev

通过execv()执行进程时,如何在C中杀死进程及其所有子级?

来自分类Dev

在C中通知父线程的子级

来自分类Dev

循环多维数组的子级

来自分类Dev

父级“知道”子级的C ++继承

来自分类Dev

从给定数组中获取特定父级的所有子级和孙子级

来自分类Dev

计算层次结构中每个节点的所有子级和子级

来自分类Dev

包装XML文档的子级

来自分类Dev

从列表创建XML子级

来自分类Dev

如何阅读XML子级

来自分类Dev

如何在Typescript React中遍历组件的子级?