当使用XmlDocument给Xml中的标签增加带前缀的属性时,需要明确指定namespace uri,如果使用root的,或是其他节点的,不会生效,简单在此做个记录。
举个例子,比如操作AndroidManifest.xml文件,向application中增加一个meta-data的标签,
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android ="http://schemas.android.com/apk/res/android" package ="com.unity3d.player" xmlns:tools ="http://schemas.android.com/tools" > <application > </application > </manifest >
首先需要先Load这个文件,然后获取到application节点,然后创建一个meta-data节点,最后将其加入到application中,
1 2 3 4 5 6 7 8 9 10 11 12 var doc = new XmlDocument();doc.Load("path/to/xml/file" ); var metaNode = doc.CreatElement("meta-data" );metaNode.SetAttribute("http://schemas.android.com/apk/res/android" , "name" , "Channel" ); metaNode.SetAttribute("http://schemas.android.com/apk/res/android" , "value" , "Mainland" ); var rootNode = doc.DocumentElement;rootNode.AppendChild(metaNode); doc.Save("path/to/xml/file" );
结果如下,如果使用父节点或是跟节点的NamespaceURI属性,那么属性将没有android前缀。
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android ="http://schemas.android.com/apk/res/android" package ="com.unity3d.player" xmlns:tools ="http://schemas.android.com/tools" > <application > <meta-data android:name ="Channel" android:value ="Mainland" /> </application > </manifest >