Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2017, 12:36   #11
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

/. по-моему не нужен тут. Это аналогично как в файловой системе, текущий элемент. В некоторых ситуациях бывает надо, но тут вряд ли необходим.

@ это фича C# для строковых литералов на несколько строк или использования \ без экранирования. Тут не нужно.

? это упрощение работы с null из C#6
https://habrahabr.ru/post/249555/
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.09.2017, 13:27   #12
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

А ето
Цитата:
//table[4]
?
Почему 4-ая таблица?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 04.09.2017, 13:47   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Глупый вопрос "что почитать". Берешь и читаешь одно другое третье и что-то прояснится.
В данном случае документацию по XPath
Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
В этой строке, как объяснить для себя?
Код:
var row = doc.DocumentNode.SelectSingleNode($"//table[4]//tr/td[text()=\"{currency.ToUpper()}\"]/../.");
В row записываем все ноды по критерию:
не все ноды, а одна конкретная. В данном случае это будет тэг tr, т.е. строка таблицы. XPath я получил следующим образом: в браузере нашел нужный элемент, получил его XPath, он был слишком длинный и некрасивый. Я его немного сократил. Таблицы не пересчитывал, а том же браузере лишнее по своему усмотрению убрал - работает и ладно, ибо приводил как пример работы с HtmlAgilityPack, а не доку по XPath.
Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
а) из 4-й таблицы table, (//table[4])
б) найти все теги tr, (//tr)
в) в которых есть дети td c текстом <currency>, (/td[text()=\"{currency.ToUpper()}\"])
г) взять всех ихних детей (/..)
д) ??? (/.)
Смысл там в том, что ищем строки нужной таблицы, добираемся до каждого тэга td, если там нужная валюта, значит это нужная строка и через .. и . возвращаемся наверх к тэгу tr.
Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
var amountNode = row?.SelectSingleNode(@"td[3]");
var priceNode = row?.SelectSingleNode(@"td[5]");
в amountNode передаем текст из 3-го тега td?
в priceNode передаем текст из 5-го тега td?
не текст, а ссылку на саму ноду. Текст берётся дальше через amountNode.InnerText.
Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
@ значит "взять текст"?
эта штука значит, что компилятор должен обрабатывать текст как он есть, без поиска escape-последовательностей типа \n, \t,.. Удобно использовать для путей файлов, например, чтобы не писать везде удвоенные слэши. Вот два равноценных варианта:
Код:
var a = "C:\\Data\\file.txt";
var b = @"C:\Data\file.txt";
Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
row? - это что?
Это так называемый элвис-оператор: https://msdn.microsoft.com/ru-ru/magazine/dn802602.aspx
pu4koff вне форума Ответить с цитированием
Старый 04.09.2017, 13:49   #14
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
А ето
?
Почему 4-ая таблица?
Я сам не знаю почему 4-я Так браузер сгенерировал и по такому пути правильную таблицу находил. Я не вникал в суть.
Браузер выдал полный путь вида:
Код:
/html/body/table/tbody/tr/td[2]/table/tbody/tr/td[2]/div[4]/table[4]/tbody/tr[1]/td[1]
Я его чутка подрезал, про 4-ю таблицу не обратил внимания даже.

Последний раз редактировалось pu4koff; 04.09.2017 в 13:58.
pu4koff вне форума Ответить с цитированием
Старый 04.09.2017, 14:03   #15
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

table[4] это не 4-й индекс в документе, это 4-й потомок родителя.
Чтоб во всем документе надо (//table)[95]

Я бы как-то так делал:
Код:
//div[contains(@class, 'content')]/table[4]//td[text()='RUB']/..
Код:
$"//div[contains(@class, 'content')]/table[4]//td[text()='{currency.ToUpper()}']/.."
ЗЫ $ кстати можно использовать вместе с @.
Но в XPath я обычно просто другие кавычки пишу.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 04.09.2017 в 14:11.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делает this? Мой повелитель Общие вопросы по Java, Java SE, Kotlin 3 12.06.2016 11:21
Что это ? Что и как делает этот код? Dimka-novitsek Общие вопросы C/C++ 1 03.05.2015 01:57
что делает while(3) Sterben Помощь студентам 2 09.04.2015 23:54
Обьясните пожалуста как и что делает эта программа и почему она это делает. Dimka-novitsek Общие вопросы C/C++ 7 16.10.2013 12:02
Печать. Что делает MS и не делает Delphi Влад12 Общие вопросы Delphi 8 05.05.2010 20:04