分析为命名空间的问题。
解决方案
bool exportCfg::writeSCDFile(QDir exportDir)
{
// 读取XML文件
QFile filexml(":/prefix/image/****.xml");
if (!filexml.open(QIODevice::ReadOnly | QIODevice::Text)) {
return -1;
}
// 创建QXmlStreamReader对象
QXmlStreamReader xml(&filexml);
// 创建XML文件
QFile xmlfile(exportDir.path () +"/1**.xml");
if (!xmlfile.open(QIODevice::WriteOnly | QIODevice::Text)) {
return -1;
}
// 创建QXmlStreamWriter对象
QXmlStreamWriter xmlWriter(&xmlfile);
xmlWriter.setAutoFormatting(true); // 设置自动格式化
while (!xml.atEnd() && !xml.hasError()) {
xml.setNamespaceProcessing(false);//取消命名空间
xmlWriter.writeCurrentToken(xml);
if (xml.isStartElement() && xml.name() == "tag") {
xmlWriter.writeStartElement("GSEEEEE");
xmlWriter.writeAttribute("ldInst", "PI");
xmlWriter.writeAttribute("cbName", QString::number(12));
xmlWriter.writeStartElement("Address");
xmlWriter.writeStartElement("P");
xmlWriter.writeAttribute("type", "MAC");
xmlWriter.writeCharacters("mac");
xmlWriter.writeEndElement();//P
xmlWriter.writeStartElement("P");
xmlWriter.writeAttribute("type", "VLAN-ID");
xmlWriter.writeCharacters(QString::number(3));
xmlWriter.writeEndElement();//P
xmlWriter.writeStartElement("P");
xmlWriter.writeAttribute("type", "VLAN-PRIORITY");
xmlWriter.writeCharacters(QString::number(2));
xmlWriter.writeEndElement();//P
xmlWriter.writeStartElement("P");
xmlWriter.writeAttribute("type", "APPID");
xmlWriter.writeCharacters("123344");
xmlWriter.writeEndElement();//P
xmlWriter.writeEndElement();//Address
xmlWriter.writeStartElement("MinTime");
xmlWriter.writeAttribute("unit", "s");
xmlWriter.writeAttribute("multiplier", "m");
xmlWriter.writeCharacters("2");
xmlWriter.writeEndElement();//MinTime
xmlWriter.writeStartElement("MaxTime");
xmlWriter.writeAttribute("unit", "s");
xmlWriter.writeAttribute("multiplier", "m");
xmlWriter.writeCharacters(QString::number(50000));
xmlWriter.writeEndElement();//MaxTime
xmlWriter.writeEndElement();//GSE
}
xml.readNext();
}
if (xml.hasError()) {
qDebug() << "XML Error:" << xml.errorString();
}
// 关闭文件
xmlfile.close();
filexml.close();
return true;
}