c# - 使用 C# 动态读取 XML 和执行函数

标签 c# xml

我有一个 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 词,我都有一个方法。我如何读取此 xml 并使用参数动态执行方法。 Parameter Name 是我方法中的实际变量。参数的数量每次都不同。准确地说,我想读取 xml 并获取 Action 词列表,然后使用这些值执行它们。 提前感谢您的帮助。

-萨西

最佳答案

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"]));
}

关于c# - 使用 C# 动态读取 XML 和执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530155/

相关文章:

android - 将颜色链接到 Android 中的其他颜色 xml

javascript - 在 JavaScript 中通过节点名称导航元素

C# 在文件中搜索字符串并获取字符串的行号

c# - 升级到 .NET Core 1.1.1 后,ASP.NET Core MVC 应用程序洞察力停止工作

c# - 如何从列表框中获取选定的项目在 WPF 中有复选框?

android - 按钮不透明度/透明度

java - OpenNLP : documentBuilderFactory. setFeature ("http://javax.xml.XMLConstants/feature/secure-processing",真)ParserConfigurationException

c# - 托管代码中的 GetBinaryType 给出相反的结果

c# - "Async All the Way Down": Well, 底部到底是什么?

java - Google Places API 比网络搜索还差?