【Unity3d】C#使用XmlDocument读写xml含冒号的节点(含命名空间)
程序员文章站
2022-03-27 21:42:01
发现在使用C#的XmlDocument读写XML文件时,读写带冒号的节点时,冒号前的内容给忽略了。举个例子,以下是AndroidManifest.xml文件的部分内容:
发现在使用C#的XmlDocument读写XML文件时,读写带冒号的节点时,冒号前的内容给忽略了。
举个例子,以下是AndroidManifest.xml文件的部分内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
当使用c#的XmlDocument来动态添加权限时,
一般我们会这样写:
string amFilePath = ".../AndroidManifest.xml";
XmlDocument amXmlDocument = new XmlDocument ();
amXmlDocument.Load (amFilePath);
XmlNode manifestNode = amXmlDocument.SelectSingleNode ("/manifest");
ArrayList permissionList = ...;
foreach (string permissionStr in permissionList) {
XmlElement permissionElement = amXmlDocument.CreateElement ("uses-permission");
permissionElement.SetAttribute ("android:name", permissionStr);
manifestNode.AppendChild (permissionElement);
}
amXmlDocument.Save (amFilePath);
这样写后,最后生成的节点是这样的:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
发现name前的"android"没有了。这样当然是不对的。
正确的写法是在创建节点时指定命名空间,这个命名空间是已经在根节点中存在的。
正确代码如下:
foreach (string permissionStr in permissionList) {
XmlElement permissionElement = amXmlDocument.CreateElement ("uses-permission");
permissionElement.SetAttribute ("name", "http://schemas.android.com/apk/res/android", permissionStr);
manifestNode.AppendChild (permissionElement);
}
这样生成的节点属性名称就是"android:name"。
需要注意的是,CreateELement方法和SetAttribute方法都有重载方法支持添加命名空间。
本文地址:https://blog.csdn.net/devnn/article/details/107515608
上一篇: STM32莫名奇妙hard fault
下一篇: 监控服务zabbix部署