2011-11-10 24 views
0

我试图更新我的应用程序中从XML文件读取数据的部分。目前我正在使用XPATH,但我想更新到LINQ。从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; 
    } 

注意ztrXmlDocument实例。

下面是XML文件的样子: enter image description here

+0

请提供您的xml文件结构。 –

+0

完成!希望它有帮助,这是一个巨大的文件! –

+0

什么程序输出这个?我看到几个人在谷歌尝试解析这些确切的文件类型... –

回答

2

试试这个

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; 
} 

如果它无法理解这一点,请不要犹豫,问!