QXmlStreamWriter在读取111.xml时,会同时读取属性和命名空间
将属性和命名空间写入222.xml时,xmlns会增加前缀n1
111.xml
XML
<?xml version="1.0" encoding="UTF-8" ?>
<SCL xmlns="https://www.baidu.com/"
xmlns:xsi="https://www.baidu.com//2001/XMLSchema-instance" xsi:schemaLocation="https://www.baidu.com/ 123" xmlns:schemaLocation="https://www.baidu.com/456"/>
写入222.xml时
XML
<?xml version="1.0" encoding="UTF-8" ?>
<SCL xmlns:n1="https://www.baidu.com/"
xmlns:xsi="https://www.baidu.com//2001/XMLSchema-instance" schemaLocation="https://www.baidu.com/ 123" xmlns:schemaLocation="https://www.baidu.com/456"/>
此时QXmlStreamWriter会自动增加命名空间前缀n1
**xmlns
**是 XML 命名空间的标准前缀,用于声明命名空间。它告诉解析器某个前缀对应的是哪个 URI
writeDefaultNamespace ( const QString & namespaceUri );
writeDefaultNamespace("https://www.baidu.com/")
使用这个函数设置一下默认namespaceUri就可以了
对应命名空间前缀重复的schemaLocation
下一级的会被忽略
我们需要手动加上,在遍历写入属性时,判断一下改属性的namespaceUri
cpp
if (attrName == "schemaLocation" && basic_ssd_info_tmp.scl_attr.at(i).namespaceUri() == "https://www.baidu.com//2001/XMLSchema-instance")
{
// 特别处理 schemaLocation 属性,确保带有 xsi 前缀
xmlWriter.writeAttribute("xsi:schemaLocation", attrValue);
}
else {
// 其他属性直接写入
xmlWriter.writeAttribute(attrName, attrValue);
}