- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如何从QString
创建QDomDocument
,其中包含很多XML
节点?
我知道一种方法 - 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 版本和编码。正如我想象的那样,一个正确的决定:
我需要创建QDomDocument rhythmdb;
为 rhythmdb 指定 XML
版本和编码
创建子元素,例如 QDomElement childElement= rhythmdb.createElement("breakfast_menu");
附加 XML
breakfast_menu
元素的内容,如 childElement.setContent(res);
但是 QDomElement
对象没有 setContent
方法。
我怎样才能用这种方式编程?
谢谢。
最佳答案
查看文档,您似乎确实只能将 QString 转换为整个 QDomDocument。您不能将其作为 QDomNode(s) 加载到现有节点中。
您可以——但是——使用QDomDocument::importNode() 在QDomDocuments 之间复制加载的节点。 .因此,为了混合来自不同来源 QString 的 Material ,您可以 setContent()
在临时文档上,然后将其所需的任何节点导入到目标文档中。导入后,将这些本地拷贝插入到您想要的位置。
在您的情况下,这不会帮助您使用当前形式的字符串。它是一系列没有单一根元素的 sibling 。而 QDomDocument 只需要一个 setContent()
来自有效的 XML,根据 Wikipedia :
Each XML document has exactly one single root element. It encloses all the other elements and is therefore the sole parent element to all the other elements. ROOT elements are also called PARENT elements.
因此如果setContent()
是您唯一的字符串到 XML 机制,您需要在加载之前将其包装在单个父项中。在它前面加上 <breakfast_menu>
并附加 </breakfast_menu>
通过适当的 ROOT 使其成形似乎很好。
但是不用担心 <?xml version='1.0' encoding='UTF-8'?>
:
输入时的编码仅在从字节流加载时相关。您正在从 QString 加载,解码已经完成......(正确或不正确)。这是Unicode code points到那时,无论你说什么,编码都会产生零影响。
如果您想要在您的输出 上声明 XML,无论如何您都必须在 Qt 中手动添加它。默认情况下不包含它,必须使用 QDomDocument::createProcessingInstruction 明确指定.这部分是因为规范说它是可选的,部分是因为无论如何永远不会有另一个 XML 标准。 ;-)
关于c++ - QDomDocument - 如何从 QString 创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29195697/
我在一个 HTML 文件中有几个不同类的 div,如下所示: ... ... ... 我有一个 Qt (4.7) 程序,我需要能够根据类从中获取特定的 div。我需要在这个程序中使用 QDomDocu
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我目前正在研究 QDomDocument,我想实现几个功能,但我只想使用一个 QDomDocument。所以要在工作时做到这一点,我有时需要返回 Root 值。 例如,我有一个这样的 XML;
我是新手,我正在创建一个 XML 文件,我需要在其中提供 CRC 值以在服务器上进行交叉检查。为此,我需要 QDomDocument 数据作为文本。为此,我首先使用伪造的 CRC 值创建 XML 文件
我的问题如下: 我打开一个 XML 文件: A 212 Test1 & Test2 不能像下面这样设置内容: xmlFile->open(QIODevice::ReadOnly|QI
我将加载多个 XML 文件,每个文件都放入一个 QDomDocument 中,然后使用一个 QMap 将一个标识字符串与每个文档相关联。我应该在 map 中存储 QDomDocument 还是指向 Q
A 收到这样的字符串: # 998.40 49920 我想使用 QDomDocument 通过索引获取参数子节点的值(我想在示例中提取字符串“# 998
我有一个 XML 文档,其中的一个元素已被注释掉。如何在此示例应用程序中跳过该项目? #include #include int main(int argc, char *argv[]) {
我正在用 XML 做一些事情,现在我很困惑。此代码完美运行: QDomElement new_item = doc.createElement(name); new_item.setA
我想在 xml 模型中创建 QDomDocument 的深层拷贝,以便用户以后可以将文档恢复到其原始状态。 QDomDocument documentation说这可以通过使用 cloneNode()
我有 xmpp iq,我从 QByteArray 加载到 QDomDocument,但我需要它作为 QDomElement You need an x:data capable cli
我在尝试将 setContent() 用于 QDomDocument 对象时遇到问题.. 代码如下: QFile f("database.xml"); if(!f.open(QFile::ReadOn
在 QWebView 中我可以执行 javascript 代码。但是 QWebView 不适合在线程中运行,我想将执行转移到线程中。 有没有办法在 QDomDocument 中执行 javascrip
编辑 Bounty 转到一个体面的 FOSS 许可函数,它将进行转换。 我有一个 QDomDocument,它是 HTML,我想在一个小部件中呈现它。 有很多 QtWebkit 类,但它们似乎没有使用
如何从QString创建QDomDocument,其中包含很多XML节点? 我知道一种方法 - setContent 方法。但这不是更好的方法 - 如果我需要从内容类似于 的字符串创建 XML
我被 C# 和它在 System.Xml 命名空间中的 XML 操作类宠坏了(当然是烂透了)。我可以将 XML 文件加载到 XmlDocument 中。我可以使用 XmlNode.SelectNode
我在 Qt 中使用 Botan 库进行加密。我让它工作到我可以从一个文件加密和解密到另一个文件的地方,但我试图改变它以从一个文件加密到一个 QDomDocument(加密文件将只是一个 XML 文件)
我正在使用 Qt 读取 C++ 代码中的 Xml 文件。我完全下载并安装了Qt5。现在,我将这一行作为标题添加到我的 C++ 代码中: #include 即使我在命令提示符中添加它的路径: expo
长话短说,我有一个程序使用 QDomDocument 类创建一个 xml 文件,然后使用 save() 函数将其保存到文本流对象。所以基本上是 QDomDocument somedoc; //crea
我的问题是,我有一个大型 XML 样式的文件,表示为 QDomDocument,我需要访问 XML 中多个位置的某些标签 我的 XML 看起来像这样 Mat_1 1
我是一名优秀的程序员,十分优秀!