欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【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

相关标签: Android