当前位置: 移动技术网 > IT编程>开发语言>.net > 【Unity3d】C#使用XmlDocument读写xml含冒号的节点(含命名空间)

【Unity3d】C#使用XmlDocument读写xml含冒号的节点(含命名空间)

2020年07月23日  | 移动技术网IT编程  | 我要评论

发现在使用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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网