QXmlStreamWriter,命名空间和前缀
QXmlStreamWriter, namespace and prefix
我是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">
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- QXmlStreamWriter,命名空间和前缀
- 有没有办法在不使用命名空间 std 或前缀 std:: 的情况下引用 cout?
- 自定义提升前缀/命名空间 - 如何使用
- 如何避免GDB中符号的命名空间前缀?
- connect() 似乎用错误的命名空间作为信号的前缀
- 具有前缀映射和不带前缀映射的 Pugiparse 命名空间
- 在命名空间前缀解析和优化级别依赖关系中使用外部"C" C++
- 使用 std 命名空间,为什么(或为什么不)我应该在 std:: 前面加上前缀
- 为什么命名空间中的某些函数可以在没有命名空间范围前缀的情况下访问
- 在 CPP 文件中使用命名空间作为函数定义的前缀是否是一种好的做法
- 在C++命名空间中,当在头中声明的非成员子例程前面加前缀时,“static”限定符是否有任何作用
- 为什么某些 Boost 函数不需要以命名空间为前缀
- 我想从这段代码中删除使用命名空间std,但我不确定什么都需要用std::作为前缀