如何手动创建QDomNodes?

时间:2013-05-10 13:46:22

标签: qt

我正在为元数据加载器进行单元测试,它采用QDomNode并将信息提取到std :: map中。 现在我必须创建包含我想要提取的所有信息的QDomNode。 通常这个节点是从xml文件中取出的,这就是为什么我认为我可能会这样做:

QDomNode metaNode()
{
  QDomDocument document;

  QByteArray metaArray(
    "<item name=\"author\">testManager</item>"
    "<item name=\"campaign\">testCampaign</item>"
    "<item name=\"comment\">testComment</item>"
    "<item name=\"date\">25.04.2013</item>"
    "<item name=\"description\">testDescription</item>"
    "<item name=\"projnum\">1</item>"
    "<item name=\"title\">test</item>");

  document.setContent(metaArray);
  QDomNode meta = document;

  return meta;
}

但它似乎不起作用。当我调用meta.childNodes()时,我希望有一个包含七个项目的列表,但只获得第一个项目,名称为“author”,其值为“testManager”;

2 个答案:

答案 0 :(得分:1)

因此在Mat指出我错过了一个&#39;容器&#39;节点,我试过并使它工作。
这是工作代码,它使我能够像从Xml-File中读取的那样使用节点(但没有文件系统依赖性):

QDomNode metaNode()
{
  QDomDocument document;

  QByteArray metaArray(
  "<metadata>"
    "<item name=\"author\">testManager</item>"
    "<item name=\"campaign\">testCampaign</item>"
    "<item name=\"comment\">testComment</item>"
    "<item name=\"date\">25.04.2013</item>"
    "<item name=\"description\">testDescription</item>"
    "<item name=\"projnum\">1</item>"
    "<item name=\"title\">test</item>"
  "</metadata>");

  document.setContent(metaArray);
  QDomNode meta = document;

  return meta;
}

答案 1 :(得分:0)

使用实际的test.xml文件不会使测试更好吗?由于您实际上想要测试带有.xml文件并返回QMap的代码,我认为最好在测试中使用.xml文件。