[英]Easier way to query an XML file? C# - MVC .Net
截至目前,我的代码运行良好,没有任何问题,但我想输入是否有更简单的方法来读取 XML 文件。
所以这里是我在做什么的总结:
这不是我的 XML 文件的样子,但这里有一个简单的例子 mocking 它让你更好地了解我正在使用什么。
-<status>
-<CallBase FilePath="EU\Domain Users" CallValid="True" CodedPath="D:\Users\CASE\"
TracePath="D:\Users\CASE\" StartEnviorment="" ServerLogs="" ServerPath="" ConfigPort="217757"
PacePort="217757" Version="2.5.0.73" Version2="10.3.0.73" VersionName="CASEservice"
LastTimeCheck="08/05/2020 15:05:07">
<ValidPermissions Default=""/>
</CallBase>
</status>
我为名为“CallBase”的 CallBase 元素创建了一个 class,其中包含 FilePath、CallValid、CodedPath、TracePath、StartEnviorment、ServerLogs、ServerPath、ConfigPort、PacePort、Version 等字符串。
以下是我如何读取此特定节点并将其存储在 CallBase object 中:
private CallBase getCallBaseData(List<XmlDocument> xmlDoc, int i)
{
var result = xmlDoc[i].DocumentElement.SelectNodes("//CallBase");
foreach (var node in result)
{
var temp1 = node.ToString();
}
XmlNode xmlNode = xmlDoc[i].SelectSingleNode("//CallBase");
XmlSerializer serial = new XmlSerializer(typeof(CallBase));
CallBase tempresult = (CallBase)serial.Deserialize(new XmlNodeReader(xmlNode));
return tempresult;
}
但是,现在我有很多相同的功能,我用不同的元素名称替换了“CallBase”。 我想知道是否有其他方法可以做到这一点,所以我只有一个 function。
一组仅在元素类型上有所不同的方法可以用一个通用方法替换。
幸运的是,xml 元素的名称与 class 类型的名称相匹配。 我们将使用Type.Name属性从那里获取它。
private T GetData<T>(List<XmlDocument> xmlDoc, int i)
{
var xpath = "//" + typeof(T).Name;
var result = xmlDoc[i].DocumentElement.SelectNodes(xpath);
foreach (var node in result)
{
var temp1 = node.ToString();
}
var xmlNode = xmlDoc[i].SelectSingleNode(xpath);
var serial = new XmlSerializer(typeof(T));
var tempresult = (T)serial.Deserialize(new XmlNodeReader(xmlNode));
return tempresult;
}
使用:
GetData<CallBase>(..., ...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.