XML Vypis podle Lekce (ComboBox nastavit Value) – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

XML Vypis podle Lekce (ComboBox nastavit Value) – .NET – Fórum – Programujte.comXML Vypis podle Lekce (ComboBox nastavit Value) – .NET – Fórum – Programujte.com

 

Mutagen0
Super člen
8. 8. 2010   #1
-
0
-

Zdravim mam tam takovej scp kterej mi ma podle ComboBoxu vypsat veci z XML ale rpoblem je v tom ze nemuzu nastavit pri spusteni Index na Hodnotu protoze me to vsechno vypisuje z XML ...



//--------XML----------
XmlDocument xml = new XmlDocument();
xml.Load("verbs.xml");

foreach (XmlNode n in xml.SelectNodes("/slovicka/lekce"))
{
lekceview.Items.Add("Lekce : " + n.Attributes["id"].Value);
}

if(lekceview.SelectedValue == null)
czen.Items.Add("Chyba");
return;
foreach (XmlNode na in xml.SelectNodes("/slovicka/lekce[@id="+lekceview.SelectedValue+"]/verb"))
{
cz.Text = na.Attributes["cz"].Value;
en.Text = na.Attributes["en"].Value;
czen.Items.Add("Cz : " + na.Attributes["cz"].Value);
czen.Items.Add("En : " + na.Attributes["en"].Value);
czen.Items.Add("---------------------------------");
}
//--------EndExtractXML--------

Porad to pise chyba a vubec nevim co s tim :(

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
10. 8. 2010   #2
-
0
-

kebyže si vložíš ešte do XML položku niečo ako "posledná lekcia", nastavíš ju na poslednú lekciu ktorú robil.

následne po tom prvom for cykle dáš že :
combo.selectedindex = lekciaUlozenaVXML //default si daj 0

a následne zobrazovanie lekcie si daj do combo.SelectedIndexChanged_event

takto by to nešlo?

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
10. 8. 2010   #3
-
0
-

O neco podobnyho sem se pokousel ale asi sem to mel blbe nemohl by jsi me napsat jak to tak priblizne ma vypadat ?

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
10. 8. 2010   #4
-
0
-

no vytiahnuť konkrétny element z xml si už ukazoval, takže to čo potrebuješ vytiahnuť budeš vedieť, a tu je kod obsluhy formulara:

public partial class Form1 : Form

{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
comboBox1.Items.Add((i*10).ToString()); //samozrejme toto nacitas z xml
}
comboBox1.SelectedIndex = 4; //toto je ta lekcia, cislo 4 nacitas ten novy element co pridas do xml
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//spusti sa uz pri tom priradeny comboBox1.SelectedIndex = 4 vo form_Load, takze hned zobrazi uvodnu lekciu
string oznacenieLekcie = comboBox1.SelectedItem.ToString();
//spracovanie XML dokumentu, vyberes teda tu cast xml, kde je nasa lekcia
textBox1.Text = oznacenieLekcie; //nazov lekcie v ukazke do textboxu
}
}

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
11. 8. 2010   #5
-
0
-

Kdyz to udelam takhle

public partial class MainForm : Form

{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//

//--------XML----------
XmlDocument xml = new XmlDocument();
xml.Load("verbs.xml");

foreach (XmlNode n in xml.SelectNodes("/slovicka/lekce"))
{
lekceview.Items.Add("Lekce : " + n.Attributes["id"].Value);
}
lekceview.SelectedIndex = 0;
}

private void LekceviewSelectedIndexChanged(object sender, EventArgs e)
{
XmlDocument xml = new XmlDocument();
xml.Load("verbs.xml");
foreach (XmlNode na in xml.SelectNodes("/slovicka/lekce[@id="+lekceview.SelectedValue+"]/verb"))
{
cz.Text = na.Attributes["cz"].Value;
en.Text = na.Attributes["en"].Value;
czen.Items.Add("Cz : " + na.Attributes["cz"].Value);
czen.Items.Add("En : " + na.Attributes["en"].Value);
czen.Items.Add("---------------------------------");
}
}
}

Tak mi akroad vyhodi error System.Xml.XPath.XPathException: Výraz musí být vyhodnocen jako sada uzlů.
A todle mi to hazi porad kdyz to udelam podle nejakych rad ...

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
11. 8. 2010   #6
-
0
-

tá chyba hovorí o tom, že is si zle zapísal ten XPath výraz na vybratie konkrétnej lekcie.

Tu bez výzoru Tvojho XMLdocumentu sa bude asi ťažko radiť, skús ho uverejniť, stačí jedna lekcia ak môžeš


Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
11. 8. 2010   #7
-
0
-

yterbium napsal:
tá chyba hovorí o tom, že is si zle zapísal ten XPath výraz na vybratie konkrétnej lekcie.

Tu bez výzoru Tvojho XMLdocumentu sa bude asi ťažko radiť, skús ho uverejniť, stačí jedna lekcia ak môžeš



Tady to je


<?xml version="1.0" encoding="windows-1250" ?>
<slovicka>
<lekce id="1">
<verb cz="Ahoj" en="Hello" />
<verb cz="Pes" en="Dog" />
</lekce>
<lekce id="2">
<verb cz="Pivo" en="Beer" />
</lekce>
</slovicka>

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
11. 8. 2010   #8
-
0
-

XML:

<?xml version="1.0" encoding="utf-8"?>


<slovicka poslednalekcia="2">
<lekce id="1">
<verb cz="Ahoj" en="Hello" />
<verb cz="Pes" en="Dog" />
</lekce>
<lekce id="2">
<verb cz="Pivo" en="Beer" />
</lekce>
</slovicka>


kod formy:
 XPathNavigator navigator = null;


private void Form1_Load(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + @"/file.xml");
navigator = doc.CreateNavigator();
navigator.MoveToRoot();
navigator.MoveToFirstChild(); //da nas na root
string lekciaPosledna = navigator.GetAttribute("poslednalekcia", "");

navigator.MoveToFirstChild();
do
{
comboBox1.Items.Add(navigator.GetAttribute("id", "")); //druhy parameter je namsespace, ktory nepouzivas
}
while(navigator.MoveToNext());

comboBox1.SelectedIndex = Int32.Parse(lekciaPosledna)-1;



}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
navigator.MoveToRoot();
string vybrata = comboBox1.SelectedItem.ToString();
XPathNavigator hladana = navigator.SelectSingleNode(@"slovicka/lekce[@id='" + vybrata + "']");
hladana.MoveToFirstChild();
do
{
string engword = hladana.GetAttribute("en", "");
string czword = hladana.GetAttribute("cz","");
textBox1.Text += engword + czword +"\r\n";
}
while(hladana.MoveToNext());
textBox1.Text+= "\r\n";
}


form obsahuje len combobox s textboxom, žiadne formátovanie kodu ani ošetrovanie výnimiek , to už zvládneš ako to cheš rozdeliť

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
11. 8. 2010   #9
-
0
-

Jj dik hnedka jak budu mit cas tak to vyskousim a pak ti dam vedet jestli se mi to fakt povedlo :-D
Jen se chci zeptat co ma znamenat to



do

{

Diky

Nahlásit jako SPAM
IP: 88.101.160.–
Mutagen0
Super člen
11. 8. 2010   #10
-
0
-

No kdyz sem to udelal podle tebe tak mi to zase vyhodi error :
http://koukej.707.cz/obrazky/Error_Aj.jpg

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
12. 8. 2010   #11
-
0
-

no ten "do" cyklus prechádza každý element elementu "lekcia"

a tá chyba vypadá ako chyba pri zadávaní lekcie a jej konvertovaní zo stringu do int. Dávaš tam dobré číslo? pošlem Ti moje solution z VS, ktoré mi beží?

Predpokladám že to robí na tomto riadku:

comboBox1.SelectedIndex = Int32.Parse(lekciaPosledna)-1;

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
12. 8. 2010   #12
-
0
-

yterbium napsal:
no ten "do" cyklus prechádza každý element elementu "lekcia"

a tá chyba vypadá ako chyba pri zadávaní lekcie a jej konvertovaní zo stringu do int. Dávaš tam dobré číslo? pošlem Ti moje solution z VS, ktoré mi beží?

Predpokladám že to robí na tomto riadku:

comboBox1.SelectedIndex = Int32.Parse(lekciaPosledna)-1;


Jo presne v tomdle radku ... Jinak jesttli se mi to divy vasi pomoci podari zprovoznit tak zase se do toho psutim :-)

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
12. 8. 2010   #13
-
0
-

no tak takto sa spýtam:

vložil si do toho xml súboru tento atribute a je to integer do hlavného root elemenut, ako ukazuje ukážka "môjho xml súboru" , pár príspevkov vyššie


string lekciaPosledna = navigator.GetAttribute("poslednalekcia", "");

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
12. 8. 2010   #14
-
0
-

yterbium napsal:
no tak takto sa spýtam:

vložil si do toho xml súboru tento atribute a je to integer do hlavného root elemenut, ako ukazuje ukážka "môjho xml súboru" , pár príspevkov vyššie


string lekciaPosledna = navigator.GetAttribute("poslednalekcia", "");


Vlozil a proste chyba nevim cim to muze bejt hledam preklepy nebo neco takovyho ale porad nic nemuzu najit .... A porad ta sama chyba ...

Nahlásit jako SPAM
IP: 88.101.160.–
Mutagen0
Super člen
13. 8. 2010   #15
-
0
-

Tak sem konecne nasel ten preklep bylo to nejaky divny .... Diky moc uz to funguje :-)

Nahlásit jako SPAM
IP: 88.101.160.–
Mutagen0
Super člen
13. 8. 2010   #16
-
0
-

PS : Nevite nahodou nekdo jak ty verbs vypisovat nahodne po 1 ? (Popripade ze by se to pak uz ten verb neopakoval ?)
Jako ze by se od toho jakoby odecetl...

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
13. 8. 2010   #17
-
0
-

miesto cyklu ktorý Ti vybere všetko:

 do


{

string engword = hladana.GetAttribute("en", "");

string czword = hladana.GetAttribute("cz","");

textBox1.Text += engword + czword +"\r\n";

}

while(hladana.MoveToNext());


urob napr. po "stlačení tlačítka ďalšie":
 hladana.MoveToNext()  //tu treba ošetrovať, či je to prvé, vtedy použiť movetoFirst, toto použiť pri dalšom

string engword = hladana.GetAttribute("en", "");

string czword = hladana.GetAttribute("cz","");

textBox1.Text += engword + czword +"\r\n";

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
13. 8. 2010   #18
-
0
-

2 yterbium : muzu se te prosim zeptat jak to osetrim ?
A zkousel jsem si udelat podminku na pokud se bude rovnat naka lekce tak se ukaze treba jen 1 slovo neco jako Cz -> Eng tak by se ukazalo CZ ale bohuzel porad mi to hazi naky chyby a vubec nevim ... PS : Diky ten postup je v pohode jen me tam trapi to osetreni ...

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
13. 8. 2010   #19
-
0
-

Ja by som to spravil tak, že prvé slovo by som vždy načítal s cm_changed event, tam by si použil movetoFirst

A následne po kliknutí na tlačítko "dalšie", dáš:

if(hladana.MoveToNext()) //ak existuje
{
tak ju spracuj
}
else
{
messagebox.show("koniec lekcie");
}

P.S. premenn[ hladana treba dat na úroveň form, aby bola všade prístupná

Nahlásit jako SPAM
IP: 188.167.3.–
Mutagen0
Super člen
13. 8. 2010   #20
-
0
-

Jak by jsi to udelal do tohodle ?



void Button1Click(object sender, EventArgs e)
{
navigator.MoveToRoot();
string vybrana_lekce = lekceview.SelectedItem.ToString();
XPathNavigator Najdite_lekce = navigator.SelectSingleNode(@"slovicka/lekce[@id='" + vybrana_lekce + "']");
Najdite_lekce.MoveToFirst();
string engword = Najdite_lekce.GetAttribute("en", "");
string czword = Najdite_lekce.GetAttribute("cz","");
cz.Text = czword;
en.Text = engword;
cz_en.Text += engword + czword +"\r\n";
while(Najdite_lekce.MoveToNext());
cz_en.Text+= "\r\n";

}

Nahlásit jako SPAM
IP: 88.101.160.–
yterbium0
Stálý člen
14. 8. 2010   #21
-
0
-

stačí ak dáš preč ten DoWhile cyklus, tým načítaš len jeden element verb.

Následne do tlačítka "dalšie" alebo kam by si to chcel umiestniť po vyvovalní dáš kod:

		najdite_lekce.Movetonext();

string engword = Najdite_lekce.GetAttribute("en", "");

string czword = Najdite_lekce.GetAttribute("cz","");

cz.Text = czword;

en.Text = engword;

cz_en.Text += engword + czword +"\r\n";


samoyrejme XPathNavigator Najdite_lekce = null; musis dat na uroven form...

Nahlásit jako SPAM
IP: 188.167.3.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý