首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XPATH迁移到LINQ,需要帮助吗?

从XPATH迁移到LINQ,需要帮助吗?
EN

Stack Overflow用户
提问于 2011-11-10 16:21:49
回答 1查看 108关注 0票数 0

我正在尝试更新应用程序中从XML文件读取数据的部分。目前我正在使用XPATH,但我想更新到LINQ。

对于只需要获取1个值的简单XPATH查询,没问题。但是下面的方法我不知道如何在这里使用LINQ。如果你能给出一些想法,那就太好了。

代码语言:javascript
复制
    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文件的外观:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-10 17:00:39

尝尝这个

代码语言:javascript
复制
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;
}

如果你对此理解有困难,请不要犹豫,尽管问!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8076627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档