Práce s nekompletním XML v C# – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Práce s nekompletním XML v C# – .NET – Fórum – Programujte.comPráce s nekompletním XML v C# – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
plasmo0
Věrný člen
2. 12. 2009   #1
-
0
-

Ahoj,
mám nyní odpověď v XML, ale odpověď neobsahuje celé xml, ale jen pouze část. Např.:



<key xsi:type="xsd:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</key>
<value xsi:type="ns2:Map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item>
<key xsi:type="xsd:string">cislo</key>
<value xsi:type="xsd:string">155530</value>
</item>
<item>
<key xsi:type="xsd:string">cena</key>
<value xsi:type="xsd:string">55</value>
</item>
</value>


Dneska jsem se s tím babral do 2hodin do rána a nemůžu přijít na to jak to zpracovat. Vlastně potřebuj vybrat nejdříve key a jeho value. V druhém kroku vzít to value a vybrat z nej key a value a ke každému údaji potřebuju mít přístup. Můžete mi někdo popsat jak postupovat?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Reklama
Reklama
z_moravec
~ Redaktor
+3
Posthunter
2. 12. 2009   #2
-
0
-

IMHO to budeš muset parsovat ručně. Nejde o validní XML, takže XML parser to nesežere. Bude potřeba použít regulární výrazy.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
plasmo0
Věrný člen
2. 12. 2009   #3
-
0
-

To z_moravec : Tak to skáču radostí, můžeš mi prosímtě aspoň napsat jak by ty výrazi měli vypadat? S nima nejsem zrovna moc velkej kamarád :-(

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
KIIV+42
God of flame
2. 12. 2009   #4
-
0
-

To plasmo : ja sem si pri parsovani html obvykle pomahal stavovym automatem.. par promennejch neco cim urcis kde priblizne si .. (zanoreni a vynoreni) a pak jestli zrovna zpracovavas tag nebo smeti mezi nima... :D

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
plasmo0
Věrný člen
2. 12. 2009   #5
-
0
-

To KIIV : cože?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
z_moravec
~ Redaktor
+3
Posthunter
2. 12. 2009   #6
-
0
-
Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
plasmo0
Věrný člen
2. 12. 2009   #7
-
0
-

To z_moravec : Píšu následující reg. výraz dobře? Potřebuju z tagu:

<key xsi:type="xsd:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">3</key>

Právě to číslo 3. Regulérní výraz mám:


string xml = d[i].InnerXml;

Regex reg = new Regex("^<key xsi:type=\"xsd:int\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">[0–9]</key>$");
Match shoda = reg.Match(xml);


Já si myslím že ne, jelikož to nevrátí nic. Co tam mám blbě?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
dannyk0
Věrný člen
3. 12. 2009   #8
-
0
-

Tohle podle me pujde zparsovat jak pres XmlDocument, tak treba i pres XMLReader (s LINQ to XML jsem to nezkousel). Nejvetsim problemem toho dokumentu je, ze mu chybi korenovy tag. Ja to v takovem pripade proste obalim do nejakeho vlastniho korenoveho tagu (bud stringem nebo XmlElementem) a pak to pujde bez problemu zparsovat a vyhnes se vsem kravinam typu regularni vyrazy a stavove automaty :)

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
plasmo0
Věrný člen
3. 12. 2009   #9
-
0
-

To dannyk : Ahoj, už se mi ho povedlo ukecat na to aby mi vracel toto xml:



<item>
<key xsi:type="xsd:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</key>
<value xsi:type="ns2:Map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item>
<key xsi:type="xsd:string">cislo</key>
<value xsi:type="xsd:string">155530</value>
</item>
<item>
<key xsi:type="xsd:string">cena</key>
<value xsi:type="xsd:string">55</value>
</item>
<item>
<key xsi:type="xsd:string">jmeno</key>
<value xsi:type="xsd:string">Petr</value>
</item>
</value>
</item>


Můžeš mi prosím tě ukázat jak by si tohle parsoval? Díky

Nahlásit jako SPAM
IP: 147.32.22.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
3. 12. 2009   #10
-
0
-

To dannyk : Ač jsem to příliš nestudoval, souhlasím. Nejprve bych zkusil udělat z toho XML něco, co půjde parsovat standardní cestou :)

Nahlásit jako SPAM
IP: 88.146.85.–
Dušan Janošík | web: djanosik.cz, @djanosik
dannyk0
Věrný člen
3. 12. 2009   #11
-
0
-

Klasicky pomoci XmlDocument a XPathu:



XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlParserContext ctx = new XmlParserContext(null, ns, null, XmlSpace.Default);
XmlDocument doc;
MemoryStream ms = new MemoryStream(Encoding.UTF8Encoding.GetBytes(TVOJE_XML_JAKO_STRING));
using (XmlReader reader = XmlReader.Create(ms, null, ctx))
{
doc = new XmlDocument();
doc.Load(reader);
}

Timhle si nactes xml a rozparsujes vnitrne. A nyni pomoci XPathu vyberes co potrebujes:


XmlNodeList list = doc.SelectNodes("//value"); //vyber vsechny elemetny value bez ohledu na to, kde se nazachazi v xml

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
plasmo0
Věrný člen
3. 12. 2009   #12
-
0
-

To dannyk : Ahoj, děkuju, ale ještě mám jeden problém, value mám na dvou urovnich



<value xsi:type="ns2:Map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<item>

<key xsi:type="xsd:string">cislo</key>

<value xsi:type="xsd:string">155530</value>

</item>

<item>

<key xsi:type="xsd:string">cena</key>

<value xsi:type="xsd:string">55</value>

</item>

<item>

<key xsi:type="xsd:string">jmeno</key>

<value xsi:type="xsd:string">Petr</value>

</item>

</value>



A muj vysledek zatim vypada takto
cislo155530cena55jmenoPetr
155530
55
Petr

Jak mu mám říct že má brát až tu druhou úroveň value?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
plasmo0
Věrný člen
3. 12. 2009   #13
-
0
-

Tak jsem na to přišel :)

/item/value/item/value


Dá se pomocí Xpath docílit aby mi to vybralo data klic->hodnota?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
dannyk0
Věrný člen
3. 12. 2009   #14
-
0
-

Co vim, tak neda. XPath slouzi ciste k vyberu nodu/elementu. Vyber atributu a hodnot si uz musis obstarat programove.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
dannyk0
Věrný člen
4. 12. 2009   #15
-
0
-

Chci se opravit!!! Nakonec jsem zjistil, ze lze vybrat ciste hodnoty. A to pomoci funkce text() v XPath dotazu. Viz.



http://www.w3schools.com/XPath/xpath_examples.asp

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
4. 12. 2009   #16
-
0
-

Tak můžeš upravit původní příspěvek, když na něj ještě nikdo nereagoval ;)

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
dannyk0
Věrný člen
5. 12. 2009   #17
-
0
-

Ja vim, ale pak by si toho nemusel plasmo vsimnout. Nejsem si tedka jisty, jestli forum zvyrazni i posledni editovany prispevek. Proto jsem to radeji dal takto ;)

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
plasmo0
Věrný člen
5. 12. 2009   #18
-
0
-

Ahoj, díky mrknu na to :-) jsem měl teď dva dny takový rozlítaný. Výběr už mi chodí a zatím to dělám přes index. Zatím díky

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
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, 77 hostů

 

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