QDomDocument - 如何从QString创建?

3
如何从包含多个XML节点的QString中创建QDomDocument?我知道一种方法是使用setContent方法,但这不是更好的方法,如果我需要从包含类似以下内容的字符串创建XML:
<food>
    <name>Strawberry Belgian Waffles</name>
    <price>$7.95</price>
    <description>Light Belgian waffles covered with strawberries and whipped cream</description>
    <calories>900</calories>
</food>
<food>
    <name>Berry-Berry Belgian Waffles</name>
    <price>$8.95</price>
    <description>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
    <calories>900</calories>
</food>
<food>
    <name>Homestyle Breakfast</name>
    <price>$6.95</price>
    <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
    <calories>950</calories>
</food>

我需要传递像setContent字符串这样的内容。
    rhythmdb.setContent("<?xml version='1.0' encoding='UTF-8'?>"
                       " <breakfast_menu>"+res+"</breakfast_menu");

从setContent指定xml版本和编码不是一个好的方法。

  1. 我需要创建 QDomDocument rhythmdb;

  2. 为rhythmdb指定XML版本和编码

  3. 创建子元素,如QDomElement childElement= rhythmdb.createElement("breakfast_menu");

  4. 附加breakfast_menu元素的XML内容,如childElement.setContent(res);

但是,QDomElement对象没有setContent方法。

我该如何编写程序呢?

谢谢。


在这种特定情况下,可能并不重要,但是如果您要为 QString 指定编码类型,最好指定正确的编码类型:UTF-16 - MrEricSir
1个回答

2
浏览文档,似乎只能将QString转换为整个QDomDocument。无法将其作为QDomNode插入到现有的QDomDocument中。
但是,您可以使用 QDomDocument :: importNode()在QDomDocuments之间复制已加载的节点。因此,要混合来自不同源QString的材料,可以在临时文档上使用 setContent(),然后将其所需的任何节点导入到目标文档中。导入后,在需要的位置插入这些本地副本。
在您的情况下,这并不能帮助您以当前形式使用字符串。它是一系列没有单一根元素的兄弟姐妹。而且根据{{link2:Wikipedia}},QDomDocument仅接受有效XML的 setContent():

每个XML文档都只有一个根元素。它包含所有其他元素,因此是所有其他元素的唯一父元素。 ROOT元素也称为PARENT元素。

因此,如果setContent()是您唯一的字符串转XML机制,则需要在加载之前将其包装在单个父级中。 在其前面添加<breakfast_menu>并在其后面添加</breakfast_menu>似乎很好,以获得具有正确ROOT的形状。
但是不用担心<?xml version='1.0' encoding='UTF-8'?>
输入时的编码只在从字节流加载时才相关。你正在从一个QString中加载,其中解码已经完成了(正确或不正确)。此时它已经是Unicode字符,无论你说编码是什么都没有影响。
如果你想在输出中包含XML声明,那么在Qt中你必须手动添加它。默认情况下它不会被包括,并且必须使用QDomDocument::createProcessingInstruction显式地指定。这部分是因为规范说它是可选的,部分是因为永远不会有另一个XML标准。;-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接