用dom操作xml后多了 ,还将attribute位置给移动了。

蜡笔小新啦 2010-11-06 10:41:08

bool MainWindow::WriteModifyToXml(QStringList &modifyList,QStringList &modifyUserList,QList<bool> &ModifyValueList)
{

QStringList list11(modifyList);
QStringList list2(modifyUserList);

QFile file(UserAdminSettingFilePath);
QDomDocument doc;
QString errStr;int errLine;int errColumn;
doc.setContent(&file,false,&errStr,&errLine,&errColumn);

if ( file.isOpen())
file.close();

QDomElement root = doc.documentElement();
QDomElement child = root.firstChildElement();
QString modifyStr,name;QStringList modifyRowList;
if ( ModifyValueList.contains(false))
{
while(!child.isNull())
{
if ( child.tagName() == "cam")
{
child = child.firstChildElement();break;
}
child = child.nextSiblingElement();
}

for(int j=0;j<modifyRowList.count();j++)
{
QString str1 = modifyRowList[j];
QString str2 = UserAdminHeaderList[j];
}

while(!child.isNull())
{
if ( child.tagName() == "engineer" )
{
name = child.attribute("user","#none#");
int indexList = modifyUserList.indexOf(name);
if ( indexList != -1 )
{
modifyStr = modifyList.at(indexList);
modifyRowList = modifyStr.split("#");
for(int j=0;j<modifyRowList.count();j++)
{
QString str1 = UserAdminHeaderList[j];
QString str2 = modifyRowList[j];
child.setAttribute(str1,str2);
}
}
}

child = child.nextSiblingElement();
}
}


QFile f(UserAdminSettingFilePath);
if (! f.open(QFile::WriteOnly | QFile::Text))
{
QMessageBox::critical(this,tr("Failed"),tr("save failed!Please call Ken!"));
return false;
}

QTextStream textStream(&f);
doc.save(textStream,0);
f.close();
return true;
}


-------------------------------
<?xml version='1.0' encoding='utf-8'?>
<class>
<information>
aaa
</information>
<Type qa_first_step="yes;no" second_step="yes;no" qa_second_step="yes;no" input="yes;no" qa_input="yes;no" job="Fresh_man;Operator;Assistant_Captain;Captain;Assistant_Supervisor;Supervisor" first_step="yes;no" shift="day;middle;night" sys_admin="yes;no" team="cam;qa" />
<cam>
<engineer user="ken" sys_admin="yes" shift="night" team="cam" chinese_name="abc" passwd="aGVsbG9rZW4=" qa_first_step="yes" second_step="yes" />
<engineer user="aken" sys_admin="yes" shift="day" team="cam" chinese_name="addd" passwd="YWtlbg==" qa_first_step="yes" second_step="yes" />
<engineer user="cken" sys_admin="yes" shift="day" team="cam" chinese_name="ddfdfd" passwd="Y2tlbg==" qa_first_step="yes" second_step="yes"/>
<engineer user="dken" sys_admin="yes" shift="day" team="cam" chinese_name="vvvv" passwd="ZGtlbg==" qa_first_step="yes" second_step="yes" />
</cam>
</class>

---------------------- 改成了 多了 还将user等attribute移动到second_step属性后面了
<?xml version='1.0' encoding='utf-8'?>
<class>
<information>
aaa;
</information>
<Type qa_first_step="yes;no" second_step="yes;no" qa_second_step="yes;no" input="yes;no" qa_input="yes;no" job="Fresh_man;Operator;Assistant_Captain;Captain;Assistant_Supervisor;Supervisor" first_step="yes;no" shift="day;middle;night" sys_admin="yes;no" team="cam;qa" />
<cam>
<engineer passwd="aGVsbG9rZW4=" qa_first_step="yes" second_step="yes" user="ken" sys_admin="yes" shift="night" team="cam" chinese_name="abc" />
<engineer passwd="YWtlbg==" qa_first_step="yes" second_step="yes" user="aken" sys_admin="yes" shift="day" team="cam" chinese_name="addd" />
<engineer passwd="Y2tlbg==" qa_first_step="yes" second_step="yes" user="cken" sys_admin="yes" shift="day" team="cam" chinese_name="ddfdfd" />
<engineer passwd="ZGtlbg==" qa_first_step="yes" second_step="yes" user="dken" sys_admin="yes" shift="day" team="cam" chinese_name="vvvv" />
</cam>
</class>







...全文
276 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
solonet 2011-03-18
  • 打赏
  • 举报
回复

http://www.w3school.com.cn/xmldom/met_node_normalize.asp

其实很简单,只加一条语句就搞定了
XmlDocument doc = new XmlDocument();

doc.Normalize();

// 摘要:
// 将此 XmlNode 下子树完全深度中的所有 XmlText 节点都转换成“正常”形式,在这种形式中只有标记(即标记、注释、处理指令、CDATA
// 节和实体引用)分隔 XmlText 节点,也就是说,没有相邻的 XmlText 节点。
随着元宇宙概念兴起与虚拟数字人技术快速发展,虚拟主播、在线教育虚拟助教、元宇宙社交等应用场景对实时动作表情驱动系统提出更高需求。当前主流动作捕捉方案多依赖专业光学动捕设备或深度相机,设备成本高昂、部署复杂,难以在普通用户场景普及。本研究设计并实现一套基于普通单目摄像头的虚拟数字人实时动作表情驱动系统,旨在降低数字人内容生产门槛。系统采用Unity作为主开发引擎,结合Blender进行数字人模型构建与BlendShape表情系统制作,使用MediaPipe框架实现人脸关键点检测与人体姿态估计,通过C#脚本完成实时数据处理与渲染控制。系统包含五个关键模块:人脸关键点检测(MediaPipe Face Mesh提取468个关键点)、人体姿态估计(MediaPipe Pose识别33个骨骼关键点)、表情迁移映射、动作平滑优化(卡尔曼滤波与贝塞尔曲线插值消除抖动)、实时渲染(60fps流畅渲染,支持直播推流与视频录制)。实验结果表明,系统在普通笔记本上可实现60fps实时驱动,人脸关键点检测准确率达98.7%,人体姿态估计平均误差小于5像素,表情迁移相似度达92.3%。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论基础 第3章 系统架构设计 第4章 关键模块设计与实现 第5章 实验与结果分析 第6章 总结与展望 参考文献
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧