QXmlStreamWriter,命名空间和前缀

QXmlStreamWriter, namespace and prefix

本文关键字:前缀 命名空间 QXmlStreamWriter      更新时间:2023-10-16

我是XML新手,并尝试使用QXmlStreamWriter编写以下xml:

<S:Envelope xmlns:S="url1">
<S:Body>
<ns2:name1 xmlns:ns2="url2">
..

到目前为止,我已经尝试过:

sw.writeNamespace("url1", "S");
sw.writeStartElement("url1", "Envelope");
sw.writeStartElement("url1", "Body");
sw.writeStartElement("url2", "name1");
sw.writeNamespace("url2", "ns2");

但结果不是我所期望的:

<S:Envelope xmlns:S="url1">
<S:Body>
<n1:name1 xmlns:n1="url2">
..

如文档中指定的那样,使用 defaut 前缀n1代替ns2

如果我交换最后 2 行,我有:

<S:Envelope xmlns:S="url1">
<S:Body xmlns:ns2="url2">
<ns2:name1>
..

我做错了什么?

来自 QXmlStreamWriter 的文档:

可以绕过流编写器的命名空间支持,改用采用限定名称的重载方法。

也就是说,使用此重载方法:QXmlStreamWriter::writeStartElement。

我建议你像这样修改你的代码:

sw.writeNamespace("url1", "S");
sw.writeStartElement("url1", "Envelope");
sw.writeStartElement("url1", "Body");
sw.writeStartElement("ns2:name1");
sw.writeNamespace("url2", "ns2");

这将产生您根据需要声明的结果:

<S:Envelope xmlns:S="url1">
<S:Body>
<ns2:name1 xmlns:ns2="url2">