/// <summary> /// 获取参数描述 /// </summary> /// <param name="method"></param> /// <param name="parameter"></param> /// <returns></returns> public unsafe string Get(MethodInfo method, ParameterInfo parameter) { xmlNode xmlNode = get(method); if (xmlNode.Type == emit.xmlNode.type.Node) { string parameterName = parameter.Name; xmlParser.attributeIndex attribute = default(xmlParser.attributeIndex); fixed(char *nameFixed = "name", parameterFixed = parameterName) { foreach (keyValue <subString, xmlNode> node in xmlNode.Nodes) { if (node.Value.Type != emit.xmlNode.type.Node && node.Key.Equals("param") && node.Value.GetAttribute(nameFixed, 4, ref attribute) && attribute.Length == parameterName.Length) { fixed(char *attributeFixed = node.Key.value) { if (fastCSharp.unsafer.memory.SimpleEqual((byte *)parameterFixed, (byte *)(attributeFixed + attribute.StartIndex), parameterName.Length << 1)) { return(node.Value.String.Length == 0 ? string.Empty : node.Value.String.ToString()); } } } } } } return(string.Empty); }
/// <summary> /// 从指定的xml文件构建XML_File对象 /// </summary> public XML_File(string filePath) { this.filePath = filePath; string xml = FileProcess.fileToString(filePath); list = xmlNode.Parse(xml); if (list.Count > 1) { contentNode = list[1]; } }
/// <summary> /// 获取程序集信息 /// </summary> /// <param name="assembly"></param> /// <returns></returns> private unsafe static assembly get(Assembly assembly) { if (assembly != null) { assembly value; if (assemblyLock.TryGetValue(assembly, out value)) { return(value); } try { string fileName = assembly.Location; if (fileName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) { if (File.Exists(fileName = fileName.Substring(0, fileName.Length - 3) + "xml")) { xmlNode xmlNode = fastCSharp.emit.xmlParser.Parse <xmlNode>(File.ReadAllText(fileName, Encoding.UTF8), xmlParserConfig)["members"]; if (xmlNode.Type == emit.xmlNode.type.Node) { fixed(char *nameFixed = "name") { value = new assembly(); xmlParser.attributeIndex attribute = default(xmlParser.attributeIndex); foreach (keyValue <subString, xmlNode> node in xmlNode.Nodes) { if (node.Value.Type == emit.xmlNode.type.Node && node.Key.Equals("member")) { if (node.Value.GetAttribute(nameFixed, 4, ref attribute) && attribute.Length > 2) { value.LoadMember(subString.Unsafe(node.Key.value, attribute.StartIndex, attribute.Length), node.Value); } } } } } else { log.Error.Real("XML文档解析失败 " + fileName, new System.Diagnostics.StackFrame(), false); } } else { log.Default.Real("没有找到XML文档注释 " + fileName, new System.Diagnostics.StackFrame(), false); } } assemblyLock.Set(assembly, value); } finally { assemblyLock.Exit(); } return(value); } return(null); }
private void button1_Click(object sender, EventArgs e) { string xmlTarget = FileProcess.fileToString(dirDest.Text); xmlNode N = xmlNode.Parse(xmlTarget)[1]; //String tmp = ""; List <String> cmds = new List <String>(); cmds.Add("remove GAME_MAIN_ACTIVITY/intent-filter"); cmds.Add("add THIS_MAIN_ACTIVITY to GAME_MAIN_ACTIVITY"); cmds.Add("remove THIS_MAIN_ACTIVITY"); xmlNode.Combine(dirAdd.Text, dirDest.Text, dirDest.Text.Replace(".xml", "_合并.xml"), true, cmds); }
// 从public.xml创建res资源索引信息 public static Dictionary <String, List <xmlNode> > getResDic(String publicXML, Cmd.Callback call = null) { // 按type类型分类子节点。 如节点,<public type="attr" name="pstsIndicatorColor" id="0x7f010004" /> Dictionary <String, List <xmlNode> > resDic = new Dictionary <String, List <xmlNode> >(); if (File.Exists(publicXML)) { try { String xml = FileProcess.fileToString(publicXML); // 获取新生成的public.xml文件内容 List <xmlNode> list = xmlNode.Parse(xml); // 解析xml文件内容 if (!(list.Count > 1 || !list[1].name.Equals("resources"))) { return(resDic); // 第二个节点不是<resources>,则不再解析 } // 获取<resources>节点 xmlNode root = list[1]; foreach (xmlNode iteam in root.childs) { String typeName = iteam.attributes.Get("type"); // 获取节点的type类型 if (!resDic.ContainsKey(typeName)) // 生成新的list { List <xmlNode> newTypeList = new List <xmlNode>(); resDic.Add(typeName, newTypeList); } List <xmlNode> typeList = resDic[typeName]; // 获取type类型对应的节点list if (!typeList.Contains(iteam)) // 添加节点到对应的typeList中 { typeList.Add(iteam); } } resDic.Add("AllType", root.childs); // 记录所有节点id信息 } catch (Exception ex) { if (call != null) { call("【E】- " + publicXML + "文件解析异常!\r\n " + ex.ToString()); } } } else if (call != null) { call("【E】- " + publicXML + "文件不存在,无资源id信息..."); } return(resDic); }
/// <summary> /// 加载数据记录 /// </summary> /// <param name="name">名称</param> /// <param name="node"></param> public void LoadMember(subString name, xmlNode node) {//https://msdn.microsoft.com/zh-cn/library/fsbx0t7x(v=vs.80).aspx //对于泛型类型,类型名称后跟反勾号,再跟一个数字,指示泛型类型参数的个数。例如, //<member name="T:SampleClass`2"> 是定义为 public class SampleClass<T, U> 的类型的标记。 if (name[1] == ':') { char code = name[0]; switch (code & 7) { case 'T' & 7: //类型:类、接口、结构、枚举、委托 if (code == 'T') { types[name.Substring(2)] = node; } break; case 'F' & 7: //字段 if (code == 'F') { fields[name.Substring(2)] = node; } break; case 'P' & 7: //属性(包括索引程序或其他索引属性) if (code == 'P') { properties[name.Substring(2)] = node; } break; case 'M' & 7: //方法(包括一些特殊方法,例如构造函数、运算符等) if (code == 'M') { methods[name.Substring(2)] = node; } break; //case 'E' & 7://事件 // break; //case 'N' & 7://命名空间 //case '!' & 7://错误字符串 //break; } } }
/// <summary> /// 获取节点字符串 /// </summary> /// <param name="node">成员节点</param> /// <param name="name">节点名称</param> /// <returns>字符串</returns> private static string get(xmlNode node, string name) { return((node = node[name]).String.Length != 0 ? node.String.ToString() : string.Empty); }
/// <summary> /// Нахождение целевого объета /// </summary> /// <param name="node">Узел с @oid целевого объекта</param> /// <returns></returns> private Object GetSourceTargetObject(xmlNode node) { string oid = node.XQuery("string(@oid)"); return(Class.GetObject(oid)); }
/// <summary> /// Нахождение целевого объета /// </summary> /// <param name="targObject">Узел с @oid целевого объекта</param> /// <returns></returns> private Object GetCurrentTargetObject(xmlNode targObject) { string oid = targObject.XQuery("string(@oid)"); return(Class.GetObject(oid)); }