使用C#读取XML并动态执行函数(Reading XML and executing functions dynamically using C#)
我有一个xml如下:
<?xml version="1.0" encoding="ISO-8859-1"?> <TestCase Name="1.7 Bus01"> <Action Word="Login" Text="Login" TestCaseId="MPD_QS_06"> <Parameter Name="userName" Value="user1"/> <Parameter Name="userPwd" Value="user1"/> <Parameter Name="Tenant" Value="tnt1"/> <Parameter Name="expectedResult" Value="Login success"/> </Action> <Action Word="AddOrganisation" Text="AddOrganisation"> <Parameter Name="name" Value="MAHNEWX"/> <Parameter Name="senderId" Value=""/> <Parameter Name="address" Value="77 Westferry Circus"/> <Parameter Name="postCode" Value="E77 4 HB"/> <Parameter Name="city" Value="London"/> <Parameter Name="country" Value="United Kingdom"/> <Parameter Name="state" Value=""/> <Parameter Name="email" Value=""/> <Parameter Name="telCountryCode" Value=""/> <Parameter Name="telNumber" Value=""/> <Parameter Name="telExtension" Value=""/> <Parameter Name="faxCountryCode" Value=""/> <Parameter Name="faxNumber" Value=""/> <Parameter Name="faxExtension" Value=""/> <Parameter Name="roleList" Value="MAH"/> <Parameter Name="expectedResult" Value="Organisation is added"/> </Action> <Action Word="NewValidationRegistration" Text="NewValidationRegistration"> <Parameter Name="registrationname" Value="FusionUnion"/> <Parameter Name="AS2Identifier" Value="MPTVC"/> <Parameter Name="expectedResult" Value="Registration is validated"/> </Action> <Action Word="NewSubmissionRegistration" Text="NewSubmissionRegistration"> <Parameter Name="registrationname" Value="FusionUnion"/> <Parameter Name="AS2Identifier" Value="MPTVC"/> <Parameter Name="expectedResult" Value="Registration is submitted"/> </Action> <Action Word="Logout" Text="Logout"> <Parameter Name="expectedResult" Value="Logout success"/> </Action> </TestCase>对于每个Action Word,我有一个方法。 如何读取此xml并使用参数动态执行方法。 参数名称是我的方法中的实际变量。 每次参数的数量都不同。 确切地说,我想读取xml并获取动作词列表,然后使用值执行它们。 感谢您的帮助。
-Sasi
I have a xml as below:
<?xml version="1.0" encoding="ISO-8859-1"?> <TestCase Name="1.7 Bus01"> <Action Word="Login" Text="Login" TestCaseId="MPD_QS_06"> <Parameter Name="userName" Value="user1"/> <Parameter Name="userPwd" Value="user1"/> <Parameter Name="Tenant" Value="tnt1"/> <Parameter Name="expectedResult" Value="Login success"/> </Action> <Action Word="AddOrganisation" Text="AddOrganisation"> <Parameter Name="name" Value="MAHNEWX"/> <Parameter Name="senderId" Value=""/> <Parameter Name="address" Value="77 Westferry Circus"/> <Parameter Name="postCode" Value="E77 4 HB"/> <Parameter Name="city" Value="London"/> <Parameter Name="country" Value="United Kingdom"/> <Parameter Name="state" Value=""/> <Parameter Name="email" Value=""/> <Parameter Name="telCountryCode" Value=""/> <Parameter Name="telNumber" Value=""/> <Parameter Name="telExtension" Value=""/> <Parameter Name="faxCountryCode" Value=""/> <Parameter Name="faxNumber" Value=""/> <Parameter Name="faxExtension" Value=""/> <Parameter Name="roleList" Value="MAH"/> <Parameter Name="expectedResult" Value="Organisation is added"/> </Action> <Action Word="NewValidationRegistration" Text="NewValidationRegistration"> <Parameter Name="registrationname" Value="FusionUnion"/> <Parameter Name="AS2Identifier" Value="MPTVC"/> <Parameter Name="expectedResult" Value="Registration is validated"/> </Action> <Action Word="NewSubmissionRegistration" Text="NewSubmissionRegistration"> <Parameter Name="registrationname" Value="FusionUnion"/> <Parameter Name="AS2Identifier" Value="MPTVC"/> <Parameter Name="expectedResult" Value="Registration is submitted"/> </Action> <Action Word="Logout" Text="Logout"> <Parameter Name="expectedResult" Value="Logout success"/> </Action> </TestCase>For each Action Word I have a method. How can I read this xml and execute the methods dynamically with parameters. The Parameter Name s are actual variables in my methods. The number of parameters differs each time. Precisely, I want to read the xml and get the list of action words and then execute them using the values. Thanks for ur help in advance.
-Sasi
最满意答案
object obj = this; //your object containing methods XDocument xDoc = XDocument.Parse(xml); Type type = obj.GetType(); foreach (var action in xDoc.Descendants("Action")) { MethodInfo mi = type.GetMethod(action.Attribute("Word").Value); var dict = action.Descendants().ToDictionary( d=>d.Attribute("Name").Value, d=>d.Attribute("Value").Value); object[] parameters = mi.GetParameters() .Select(p => Convert.ChangeType(dict[p.Name],p.ParameterType)) .ToArray(); var expectedResult = mi.Invoke(obj, parameters); Debug.Assert(expectedResult.Equals(dict["expectedResult"])); } object obj = this; //your object containing methods XDocument xDoc = XDocument.Parse(xml); Type type = obj.GetType(); foreach (var action in xDoc.Descendants("Action")) { MethodInfo mi = type.GetMethod(action.Attribute("Word").Value); var dict = action.Descendants().ToDictionary( d=>d.Attribute("Name").Value, d=>d.Attribute("Value").Value); object[] parameters = mi.GetParameters() .Select(p => Convert.ChangeType(dict[p.Name],p.ParameterType)) .ToArray(); var expectedResult = mi.Invoke(obj, parameters); Debug.Assert(expectedResult.Equals(dict["expectedResult"])); }更多推荐
Name,<Parameter,Value,xml,电脑培训,计算机培训,IT培训"/> <meta name="
发布评论