Я работаю над приложением, которое экстракты содержимое страницы игры (example), отображает его пользователю в текстовом поле, и если пользователь хочет сделайте это, он может сохранить его как .txt-файл или .xsl (формат Excel).Эффективный способ увеличить «код» на 1 - HtmlAgilityPack
Но главная проблема я столкнулся прямо сейчас, что вы должны вручную изменить код для «извлечь» данные о другом блоке в игре.
Если открыть ссылку вы увидите, что я в настоящее время извлечения «Оружие», «Б», «Выжил» и «Потери» со стороны Defender (как сейчас), но только «1 тип единицы» (более всего одна строка этой таблицы) «извлекается», Я ищу способ поиска «tr [1]/td [2]/span [ 1] "через" tr [45]/td [2]/span [1] "(даже если примерная страница работает только до tr [16]) или, возможно, способ автоматизировать ее поиск до тех пор, пока не найдет данные (ничего), тогда это остановится.
Извините за любые текстовые ошибки, я не носитель языка
private void btnStart_Click(object sender, RoutedEventArgs e)
{
HtmlDocument brPage = new HtmlWeb().Load("http://us.desert-operations.com/world2/battleReport.php?code=f8d77b1328c8ce09ec398a78505fc465");
HtmlNodeCollection nodes = brPage.DocumentNode.SelectNodes("/html[1]/body[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[2]/table[2]");
string result = "";
List<brContentSaver> ContentList = new List<brContentSaver>();
foreach (var item in nodes)
{
brContentSaver cL = new brContentSaver();
/* Here comes the junk handler, replaces all junk for nothing, essentially deleting it
I wish I knew a way to do this efficiently */
cL.Weapons = item.SelectSingleNode("tr[16]/td[1]").InnerText
.Replace(" * ", " ")
.Replace("  ; *  ;", " ");
cL.Used = item.SelectSingleNode("tr[16]/td[2]/span[1]").InnerText
.Replace(" * ", " ")
.Replace("  ; *  ;", " ");
cL.Survived = item.SelectSingleNode("tr[16]/td[3]").InnerText
.Replace(" * ", " ")
.Replace("  ; *  ;", " ");
if (cL.Survived == "0")
{
cL.Casualties = cL.Used;
} else
{
/* int Casualties = int.Parse(cL.Casualties);
* int Used = int.Parse(cL.Used);
* int Survived = int.Parse(cL.Survived);
* Casualties = Used - Survived; */
cL.Casualties = item.SelectSingleNode("tr[16]/td[4]").InnerText
.Replace(" * ", " ")
.Replace("  ; *  ;", " ");
}
ContentList.Add(cL);
}
foreach (var item in ContentList)
{
result += item.Weapons + " " + item.Used + " " + item.Survived + " " + item.Casualties + Environment.NewLine;
}
brContent.Text = result;
}
Извините, если это звучит глупо, но я новичок в программировании, особенно в C#.
Edit 1: Я заметил, что «если (cL.Survived ==„0“)», я просто тестирование вещи некоторые вещи путь раньше, и я забыл изменить его, но эй, это работает
Edit 2: Если вы хотите знать, я также использую это:
public class brContentSaver
{
public string Weapons
{
get;
set;
}
public string Used
{
get;
set;
}
public string Survived
{
get;
set;
}
public string Casualties
{
get;
set;
}
}
Спасибо, сэр, я изменил через несколько дней после того, как никто не ответил, но это будет отлично !. –