Qt 如何手动创建QDomNodes?

Qt 如何手动创建QDomNodes?,qt,Qt,我正在为元数据加载器进行单元测试,它使用一个QDomNode并将信息提取到一个std::map中。 现在,我必须创建QDomNode,其中包含我想要提取的所有信息。 通常,此节点从xml文件中取出,这就是为什么我认为可以这样做: QDomNode metaNode() { QDomDocument document; QByteArray metaArray( "<item name=\"author\">testManager</item>"

我正在为元数据加载器进行单元测试,它使用一个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;
}
QDomNode元节点()
{
QDOM文件;
QByteArray元阵列(
“测试管理器”
“测试活动”
“testComment”
"25.04.2013"
“testDescription”
"1"
“测试”);
setContent(元数组);
QDomNode meta=文档;
返回元;
}

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

使用实际的test.xml文件不会使测试变得更好吗?因为您实际上想要测试接受.xml文件并返回QMap的代码,所以我认为最好在测试中也使用.xml文件。

所以在Mat指出我缺少一个“容器”节点后,我尝试了这一点并使其工作
这是工作代码,使我能够像从Xml文件读取节点一样使用该节点(但没有文件系统依赖项):

QDomNode元节点()
{
QDOM文件;
QByteArray元阵列(
""
“测试管理器”
“测试活动”
“testComment”
"25.04.2013"
“testDescription”
"1"
“测试”
"");
setContent(元数组);
QDomNode meta=文档;
返回元;
}

这不是有效的XML AFAIK。您需要一个顶级“容器”节点。您的意思是添加(请参阅更新)之类的内容吗?是的。现在,单子节点(根节点)应该有所有正确的子节点。好的,我想要的列表是meta.firstChild.childNodes(),而不是meta.childNodes()。谢谢你清理,现在可以用了。那么你能回答这个问题吗?我不需要任何文件系统依赖关系,这就是为什么我必须在运行时生成我们需要的“文件”。所以实际的文件不是一个选项,只要它可以用另一种方式完成。好的,你更清楚你需要什么,我只是提出了一个建议。如果您无法使QDomNode正常工作,QDomDocument类对内存中xml的创建提供了一些支持,请参见此处的文档://无论如何,我仍然认为test.xml文件与测试更相关(并且易于设置)。是的,内存中xml是我使用QDomNode的方法。不管怎样,我不是有意要把你的建议放下的。这是一种有效的方法,只是不符合我的要求。仅供参考,“容器”节点通常称为“文档元素”。在您的示例中,
document.getDocumentElement().tagName()
将返回“元数据”。
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;
}