Структура и представление HTML документа — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Структура и представление HTML документа

2017-11-17 162
Структура и представление HTML документа 0.00 из 5.00 0 оценок
Заказать работу

Если загрузить HTML документ в веб-браузер, то можно будет увидеть древовидную структуру этого документа:

Представление HTML-документа в виде древовидной структуры

Jsoupпозволяет быстро и эффективно извлекать элементы из DOM–структуры, использую селекторы CSS.

Под содержимым понимается все, что может находиться на веб-странице: рисунки, ссылки, абзацы, текст и т. д. Это обеспечивает унифицированный способ навигации по документу.

Следует заметить, что DOM может применяться не только в веб-страницах, но и к любым других документам. В частности, она может использоваться с любыми словарями XML, причем одним из таких словарей является HTML, а точнее, XHTML.

DOM является развивающимся стандартом и разбит на три уровня. Первый уровень является первой версией стандарта и пока что единственной законченной. Он состоит из двух разделов: первый является ядром и определяет принципы манипуляции со структурой документа (генерация и навигация), а второй посвящен представлению в DOM элементов HTML, определяемых одноименными тегами.

Второй и третий уровни описывают модель событий, дополняют таблицы стилей, проходы по структуре.

Глава III. Практическая часть.

Реализация.

Src/androidTest/main/assets/java/com.2210.alive.maidailyscheduller

DetailActivity

package com.a2210.alive.mydailyscheduller;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
public class DetailActivity extends FragmentActivity {
String day;
public String chosenGroup;
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Intent intent = getIntent();
day = intent.getStringExtra("CHOISE_DAY");

/** получаемпереданныйдееньнеделииз mainActivity **/
chosenGroup = intent.getStringExtra("GROUPE");

/** получаемпереданныйномергруппыиз mainActivity **/
Bundle bundle = new Bundle();
bundle.putString("CHOSEN_GROUP", chosenGroup); /** передаемномергруппывофрагменты **/
pager = (ViewPager) findViewById(R.id.pager); /** определяем ViewerPager**/
FragmentManager fm = getSupportFragmentManager();
MyAdapter myAdapter = new MyAdapter(fm, bundle);
myAdapter.notifyDataSetChanged();
pager.setAdapter(myAdapter); /** наполняем ViewerPager**/
pager.setCurrentItem(currPosition(day)); /** переходимпонужнойпозициипринажатииднянеделив mainActivity**/
}
/** функциядляопределениятекущейпозицииподнюнедели ViewerPager**/
public int currPosition(String day) {
int currPos = 0;
switch (day) {
case "Понедельник":
currPos = 0;
break;
case "Вторник":
currPos = 1;
break;
case "Среда":
currPos = 2;
break;
case "Четверг":
currPos = 3;
break;
case "Пятница":
currPos = 4;
break;
case "Суббота":
currPos = 5;
break;
}
return currPos;
}

}

 

Monday

package com.a2210.alive.mydailyscheduller;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import static com.a2210.alive.mydailyscheduller.R.layout. item;

/**
* A simple { @link Fragment} subclass.
*/
public class Monday extends ListFragment {
String groupNum;
public Monday() {
}
@Override
public void onAttach(Context context) {
super. onAttach(context);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
Bundle bundle = getArguments();
groupNum = bundle.getString("CHOSEN_GROUP");

/** извлекаемпереданныйномергруппы **/
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
new NewThread().execute(); /**запускаемпоток **/
return inflater.inflate(R.layout. fragment_monday, container, false);
}
class NewThread extends AsyncTask<String,Void,ArrayList<String>> {
@Override
protected void onPostExecute(ArrayList<String> strings) {
super. onPostExecute(strings);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),R.layout. item, R.id. item_of_sched,strings);
setListAdapter(arrayAdapter);

/**послеобновлениязаполняемсписковыйфрагментданными **/
}
@Override
protected ArrayList<String> doInBackground(String... params) {
MyData data = new MyData();
ArrayList<String> my = data.listDay("Понедельник", groupNum);

/** получаеммассиврассписаниянапонедельниквпотоке **/
return my;
}
}
}

 

MainActivity

 

package com.a2210.alive.mydailyscheduller;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
String[] days;
String[] groups;
ListView myList;
String chosenGroup;
boolean flag = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent = new Intent(this, SelectGroup. class);

/** переходимвактивитидлявыборагруппы **/
startActivity(intent);
return super. onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
if (savedInstanceState!= null) {
chosenGroup = savedInstanceState.getString("CHOSEN_GROUPE"); /**извлекаемсохраненныеданныееслиониестьпослеобновленияактивити**/
flag = savedInstanceState.getBoolean("FLAG");
}
myList = (ListView) findViewById(R.id. li);
groups = getResources().getStringArray(R.array. groups); /**массивгруппизресурсовстрок**/
Intent intent = getIntent(); /**получаеминтент **/
chosenGroup = intent.getStringExtra("MY_GROUP"); /** извлекаемизинтентапереданнуюгуппу**/
for (String group: groups)

{ /**проверкасодержитсялигруппавмассивегрупп**/
if (group.equals(chosenGroup)) {
flag = true;
break;
} else { flag = false;}
}
if (! flag){ chosenGroup = "06630";} /**еслинесодержитсятовыводимсвою **/
days = getResources().getStringArray(R.array. days_of_week); /**получаеммассивстрокизресурса strings**/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout. day_item, R.id. days_item, days); /**создаемадаптердлянаполнения Listview формируемиз TextView имассивастрок**/
myList. setAdapter(adapter); /**устанавливаемадаптер**/
myList. setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**устанавливаемслушателянажатиенаэлементсписка**/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /**методобработкинажатиянаэлсписка**/
Intent intent = new Intent(getApplicationContext(), DetailActivity. class); /**создаеминтентдляпереходавдругойактивити **/
intent.putExtra("CHOISE_DAY", days [position]); /**передаемназваниевдетеилактивитинажатогоэлементасписка**/
intent.putExtra("GROUPE", chosenGroup); /**передаемномергруппы **/
startActivity(intent);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super. onSaveInstanceState(outState);
outState.putString("CHOSEN_GROUPE", chosenGroup); /**сохраняемзначениядляобновленияактивити **/
outState.putBoolean("FLAG", flag);
}
}

 

MyAdapter

package com.a2210.alive.mydailyscheduller;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/** Классадаптердлянаполнения ViewerPager */
public class MyAdapter extends FragmentPagerAdapter {

final int pagesCount = 6;
private Bundle bundle;
Monday monday;
Tuesday tuesday;
Wednesday wednesday;
Thursday thursday;
Friday friday;
Saturday saturday; //private final Bundle fragmentBundle;
public MyAdapter(FragmentManager fm, Bundle data) {
super (fm);
bundle = data; /** добавляембандлвконструктордляпередачиномерагруппывофрагмент**/
}
@Override
public CharSequence getPageTitle(int position) {
/** добавилизаголовкиднейнеделив ViewerPager **/
String title;
switch (position) {
case 0:
title = "Понедельник";
return title;
case 1:
title = "Вторник";
return title;
case 2:
title = "Среда";
return title;
case 3:
title = "Четверг";
return title;
case 4:
title = "Пятница";
return title;
case 5:
title = "Суббота";
return title;
}
return null;
}
@Override
public int getCount() {
return pagesCount;
}
@Override
public Fragment getItem(int position) {
/** создаемфрагменты**/
monday = new Monday();
tuesday = new Tuesday();
wednesday = new Wednesday();
thursday = new Thursday();
friday = new Friday();
saturday = new Saturday();
/** возращаемфрагментприполучениипозиции ViewerPager**/
switch (position) {
case 0:
bundle. putInt("currPage", position++);
monday. setArguments(bundle);
return monday;
case 1:
bundle. putInt("currPage", position++);
tuesday. setArguments(bundle);
return tuesday;
case 2:
bundle. putInt("currPage", position++);
wednesday. setArguments(bundle);
return wednesday;
case 3:
bundle. putInt("currPage", position++);
thursday. setArguments(bundle);
return thursday;
case 4:
bundle. putInt("currPage", position++);
friday. setArguments(bundle);
return friday;
case 5:
bundle. putInt("currPage", position++);
saturday. setArguments(bundle);
return saturday;
}
return null;
}
}

 

MyData

package com.a2210.alive.mydailyscheduller;
import android.os.AsyncTask;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.ArrayList;
/**функцияполученияспискарассписанияприполученииднянеделииномерагруппы*/

public class MyData {
private ArrayList<String> my = new ArrayList<>();
private String d, w, t, s, st, n, a;
private String scheduler;

public ArrayList<String> listDay(final String dayOfWeek, final String groupeNum) {
try {
org.jsoup.nodes.Document doc = Jsoup. connect ("http://bsu.ru/rasp/?g=" +groupeNum).get(); /**получаемданныеметодом GET**/
Elements elements = doc.select("div.week"); /**разбиваемпонеделям**/
for (Element element: elements) {
Elements el = element.select("table.rasp_week");
for (Element element1: el) {
Elements elements1 = element1.select("td");
for (Element element2: elements1) {

Elements day = element2.select("h3.rasp_day"); /**получаемдень**/
for (Element element3: day) {
d = element3.text();
}
Elements time = element2.select("td.rasp_time"); /**получаемвремя**/
for (Element element3: time) {
t = element3.text();
}
Elements subj = element2.select("td.rasp_subj"); /**получаемпредмет**/
for (Element element3: subj) {
s = element3.text();
}
Elements type = element2.select("td.rasp_subj_type"); /**получаемтип**/
for (Element element3: type) {
st = element3.text();
}
Elements aud = element2.select("td.rasp_aud"); /**получаемномераудитории**/
for (Element element3: aud) {
a = element3.text();
}
Elements week = el.select("table.rasp_week").prev(); **получаемномернедели**/
for (Element element3: week) {
w = element3.text();
}
Elements name = element2.select("td.rasp_aud").next(); /**следующийэлементпосленомерааудитории - имяпреподователя**/
for (Element element3: name) {
n = element3.text();
/**еслиденьнеделисовподаеттовывеститоформируемсписок**/
if (dayOfWeek.equals(d)) {
scheduler = w + "\r\n" +
"Время: " + t + "\r\n" + "Названиепредмета: " + s + "\r\n" + "Типпары: " + st +
" Аудитория: " + a + "\r\n" + "Имяпреподавателя: " + n + "\r\n\r";
my. add(scheduler); /**добовляемстрокувсписокстрок **/
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return my;
}
}

SelectGroup

package com.a2210.alive.mydailyscheduller;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
public class SelectGroup extends AppCompatActivity {
String[] groups;
AutoCompleteTextView auto;
Button submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R.layout. activity_select_group);
groups = getResources().getStringArray(R.array. groups); /** создаеммассивгрупп**/
auto = (AutoCompleteTextView) findViewById(R.id. autocomplite_item_groupe); /** определяем AutoCompleteTextView**/
auto. setAdapter(new ArrayAdapter<String>(this,android.R.layout. simple_dropdown_item_1line, groups)); /** запоняем AutoCompleteTextView **/
submit = (Button) findViewById(R.id. submit); /**определяемкнопку **/
submit. setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = null;
id = auto. getText().toString(); /**получаемвыбранноезначениегруппы**/
Intent intent = new Intent(getApplication(), MainActivity. class);
intent.putExtra("MY_GROUP",id); /**передаемвыбранноезначениегруппыв mainActivity**/
startActivity(intent);
}
});
}
}

 

TextViewPlus

package com.a2210.alive.mydailyscheduller;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

public class TextViewPlus extends android.support.v7.widget.AppCompatTextView {
private static final String TAG = "TextView";
public TextViewPlus(Context context) {
super (context);
}
public TextViewPlus(Context context, AttributeSet attrs) {
super (context, attrs);
setCustomFont(context, attrs);
}
public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
super (context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable. TextViewPlus); /**получаеминформациюостилизированныхатрибутах**/
String customFont = a.getString(R.styleable. TextViewPlus_customFont); /**возвращаемстроковоезначениедляатрибута**/
setCustomFont(ctx, customFont); /**передаемназвание **/
a.recycle(); /**освобождаемресурсы**/
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface. createFromAsset (ctx.getAssets(), asset); /**создаемновыйшрифтизуказанного **/
} catch (Exception e) {
Log. e (TAG, "Could not get typeface: " +e.getMessage()); /**выводлогаошибки**/
return false;
}
setTypeface(tf); /**устанавливаемсозданныйшрифт**/
return true;
}

}

 

Res /drawable / layout / activity_detail.xml

<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/background"
tools:context="com.a2210.alive.mydailyscheduller.DetailActivity"
>
< android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
< android.support.v4.view.PagerTabStrip
android:id="@+id/pagerTabStrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:textSize="18sp"
android:textColor="@color/text"
/>
</ android.support.v4.view.ViewPager >
</ LinearLayout >

 

Res /drawable / layout / activity_main.xml

< LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/background"
tools:context="com.a2210.alive.mydailyscheduller.MainActivity"
>

< ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:dividerHeight="@dimen/divider"
android:divider="@color/colorPrimary"
android:id="@+id/li"
/>
</ LinearLayout >

 

Res /drawable / layout / activity_select_group.xml

<? xml version="1.0" encoding="utf-8" ?>
< RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.a2210.alive.mydailyscheduller.SelectGroup"
>
< AutoCompleteTextView
android:id="@+id/autocomplite_item_groupe"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:textColor="@color/text"
/>
< Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/submit"
android:text="@string/submit"
android:layout_below="@+id/autocomplite_item_groupe"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:textColor="@color/text"
android:background="@color/colorPrimary"
/>
</ RelativeLayout >

 

Res /drawable / layout / day_item.xml

<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:foo="http://schemas.android.com/apk/res/com.a2210.alive.mydailyscheduller"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
< com.a2210.alive.mydailyscheduller.TextViewPlus
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/days_item"
android:textColor="@color/text"
android:textSize="30sp"
android:textStyle="italic"
android:gravity="center_horizontal"
foo:customFont="vivaldi_script.ttf"
/>
</ LinearLayout >

 


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.04 с.