我正在尝试更新应用程序中从XML文件读取数据的部分。目前我正在使用XPATH,但我想更新到LINQ。
对于只需要获取1个值的简单XPATH查询,没问题。但是下面的方法我不知道如何在这里使用LINQ。如果你能给出一些想法,那就太好了。
public ContinuityData GetSingleContinuityResult(string pin)
{
ContinuityData data;
data = new ContinuityData();
data.PinName = pin;
data.PreVoltage = double.Parse(ztr.SelectSingleNode("/Document/Tests/Test[contains(Name, 'Pre Continuity')]/Groups/Group/Pins/Pin[Number='" + pin + "']/Spots/Spot/VIPair/Voltage").InnerText, CultureInfo.InvariantCulture);
data.PreCurrent = double.Parse(ztr.SelectSingleNode("/Document/Tests/Test[contains(Name, 'Pre Continuity')]/Groups/Group/Pins/Pin[Number='" + pin + "']/Spots/Spot/VIPair/Current").InnerText, CultureInfo.InvariantCulture);
data.PostVoltage = double.Parse(ztr.SelectSingleNode("/Document/Tests/Test[contains(Name, 'Post Continuity')]/Groups/Group/Pins/Pin[Number='" + pin + "']/Spots/Spot/VIPair/Voltage").InnerText, CultureInfo.InvariantCulture);
data.PostCurrent = double.Parse(ztr.SelectSingleNode("/Document/Tests/Test[contains(Name, 'Post Continuity')]/Groups/Group/Pins/Pin[Number='" + pin + "']/Spots/Spot/VIPair/Current").InnerText, CultureInfo.InvariantCulture);
return data;
}请注意,ztr是一个XmlDocument实例。
下面是XML文件的外观:

发布于 2011-11-10 17:00:39
尝尝这个
public ContinuityData GetSingleContinuityResult(string pin)
{
ContinuityData data;
data = new ContinuityData();
data.PinName = pin;
XElement xtr = XElement.Load("path/to/your/xml/file");
Func<string, string, string, double> getViData =
(testName, pin, mode) =>
Convert.ToDouble(
xtr
.Descendants("Test")
.Where(test => test.Descendants("Name")
.First().Value.Contains(testName))
.Descendants("Pin")
.Where(p => p.Descendants("Number")
.First().Value == pin)
.Descendants("VIPair")
.Descendants(mode)
.First().Value);
data.PreVoltage = getViData("Pre Continuity", pin, "Voltage");
data.PreCurrent = getViData("Pre Continuity", pin, "Current");
data.PostCurrent = getViData("Post Continuity", pin, "Current");
data.PostVoltage = getViData("Post Continuity", pin, "Voltage");
return data;
}如果你对此理解有困难,请不要犹豫,尽管问!
https://stackoverflow.com/questions/8076627
复制相似问题