【问题标题】:TinyXML2 and C++TinyXML2 和 C++
【发布时间】:2012-06-05 08:22:02
【问题描述】:

我想从 wxGrid 读取数据并将其写入 XML 文件。 wxGrid 是这样的:

贾尔 |莫纳特
------ |--------------
2012 | 03
2009 | 08


我想拥有什么:

<SQL>
    <Datensatz>
        <Jahr>2012</Jahr>
        <Monat>03</Monat>
    </Datensatz>
    <Datensatz>
        <Jahr>2009</Jahr>
        <Monat>08</Monat>
    </Datensatz>
</SQL>


我得到了什么:

<SQL>
    <Datensatz>
        <Jahr>20122009</Jahr>
        <Monat>0308</Monat>
    </Datensatz>
    <Datensatz>
        <Jahr>20122009</Jahr>
        <Monat>0308</Monat>
    </Datensatz>
</SQL>


我的代码:

XMLDocument doc;
XMLElement* xesql = doc.NewElement("SQL");
XMLNode * xnsql = doc.InsertFirstChild(xesql);
XMLElement* xejahr = doc.NewElement("Jahr");
XMLElement* xemonat = doc.NewElement("Monat");
XMLText* datensatzJahr = doc.NewText("");
XMLText* datensatzMonat = doc.NewText("");
for(int i=0; i<=1; i++)
{
    XMLElement* xedatensatz = doc.NewElement("Datensatz");
    datensatzJahr = doc.NewText(m_gd_data->GetCellValue(i,0));
    datensatzMonat = doc.NewText(m_gd_data->GetCellValue(i,1));
    xejahr->InsertEndChild(datensatzJahr);
    xemonat->InsertEndChild(datensatzMonat);
    xedatensatz->InsertEndChild(xejahr);
    xedatensatz->InsertEndChild(xemonat);
    xesql->InsertEndChild(xedatensatz);
}
doc.SaveFile(path);


我真的不知道问题出在哪里。有人可以帮忙吗?

【问题讨论】:

  • 如果一步一步调试呢?当您获取每个变量的值时,您应该清楚地了解正在发生的事情,应该很容易追踪。
  • 也许一般来说,你应该使用英文变量名。对于那些不是德语的读者/维护者。
  • @AlexandruC。 +1,对于非德国人(它是,对吗?)阅读器来说,阅读您的代码真的很困难。在德国用德语命名变量和函数是否常见?

标签: c++ wxwidgets tinyxml


【解决方案1】:

您不会为循环的每次迭代重置 XML 元素,因此您只是将文本附加到现有元素。这应该工作:

XMLDocument doc;
XMLElement* xesql = doc.NewElement("SQL");
XMLNode * xnsql = doc.InsertFirstChild(xesql);
for(int i=0; i<=1; i++)
{
    XMLElement* xejahr = doc.NewElement("Jahr");
    XMLElement* xemonat = doc.NewElement("Monat");
    XMLText* datensatzJahr = doc.NewText("");
    XMLText* datensatzMonat = doc.NewText("");

    XMLElement* xedatensatz = doc.NewElement("Datensatz");
    datensatzJahr = doc.NewText(m_gd_data->GetCellValue(i,0));
    datensatzMonat = doc.NewText(m_gd_data->GetCellValue(i,1));
    xejahr->InsertEndChild(datensatzJahr);
    xemonat->InsertEndChild(datensatzMonat);
    xedatensatz->InsertEndChild(xejahr);
    xedatensatz->InsertEndChild(xemonat);
    xesql->InsertEndChild(xedatensatz);
}
doc.SaveFile(path);

【讨论】:

    【解决方案2】:

    您必须在循环中为年份和月份创建新元素。

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2014-01-17
      • 1970-01-01
      相关资源
      最近更新 更多