#c# #xml #linq #xpath
#c# #xml #linq #xpath
Вопрос:
Я пытаюсь обновить часть в моем приложении, которая считывает данные из XML-файлов. На данный момент я использую XPATH, но хочу обновиться до LINQ.
Для простых запросов XPATH, которые мне нужны, чтобы получить только 1 значение, проблем нет. но следующим методом я не могу понять, как использовать 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-файл:
Комментарии:
1. Пожалуйста, укажите структуру вашего XML-файла.
2. Готово! надеюсь, это поможет, это огромный файл!
3. Какая программа выводит это? Я вижу, как несколько человек в Google пытаются проанализировать именно эти типы файлов…
4. Это вывод старого электронного измерительного прибора, собственное программное обеспечение которого представляет собой большой беспорядок. Итак, я думаю, что, как и я, все пытаются создать свой собственный просмотрщик результатов: D он называется Mk.2
5. Но если вы имеете в виду изображение xml вверх there….it это xMLSpear!!!!
Ответ №1:
Попробуйте это
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;
}
Если у вас возникли проблемы с пониманием этого, пожалуйста, не стесняйтесь спрашивать!