WWW pro školy
Jak na Office - tutoriály, video návody











Vytvoř si párové triko

Poradna - Nacitani dat z xml

Vložení příspěvku
Předmět:
Vaše jméno: (povinný údaj) Váš e-mail:
Text:(Zbývá: 1000 znaků - povinný údaj)
Připojit ukázkový soubor:
(Maximální velikost souboru jsou 2MB.)
 Opište následující text (kvůli zneužití):  rzrTW   

hlavní kategorie | zpět | + odpovědět na toto téma
Nacitani dat z xml - diskuze na toto téma
Mam soubor xml se strukturou viz nize a potreboval bych z nej nacist hodnoty. Delam to pomoci jednoduche procedury, ale nemuzu prijit na to jak nacist jednotlive hodnoty. Dim objDom As Object Dim xPath As String Set objDom = CreateObject("Msxml2.DOMDocument.3.0") objDom.Load ("C:\ut.xml") Dim xPath As String xPath = "/tab/odd" import = objDom.SelectSingleNode(xPath).Text < Unit Specification="oun"> < Unit Specification="oen">1558 < Unit Specification="scaleA">104 < Unit Specification="scaleB">456 < Unit Specification="scaleC"> < Unit Specification="scaleA">4514 < Unit Specification="scaleB">2 < Unit Specification="scaleC">554

honza | 8.1.2021 07:45  
 
 
Forum odstranilo konce radku takze je to neprehledne, prikladam prilohu
Odpověď
elninoslov | 8.1.2021 12:55  
 
 
Ukážte na Exceláckej prílohe, ako má vyzerať výsledok takého načítania dát z tohoto súboru.
Odpověď
Honza | 8.1.2021 13:58  
 
 
Treba z radku v prilozenem xml souboru "< Unit Specification="scaleB">456" potrebuju po zadani uzlu do parametru funkce kterou pisu dostat to cislo 456.
Odpověď
elninoslov | 8.1.2021 16:00  
 
 
A ako chcete rozoznať < Unit Specification="scaleB"> v uzle od rovnakého parametru v uzle ?
Odpověď
Honza | 8.1.2021 14:09  
 
 
Kdyz tam zadam stromovy seznam tech uzlu v xml, tak se mi vzdy vrati jen prvni nalezena hodnota, dalsi radky se mi nijak nedari nacist.
Odpověď
elninoslov | 8.1.2021 15:59  
 
 
Ale to čo uvádzate, Vám nevráti nič. Tento Váš úryvok kódu nevráti ani ten Vami spomínaný 1 prvok.
Odpověď
elninoslov | 8.1.2021 15:59  
 
 
Ale to čo uvádzate, Vám nevráti nič. Tento Váš úryvok kódu nevráti ani ten Vami spomínaný 1 prvok.
Odpověď
Honza | 8.1.2021 14:13  
 
 
Jeste bych chtel dodat, ze s VBA prakticky nepracuju, znam jen nejake zaklady, tak prosim betre na to ohled :-)
Odpověď
elninoslov | 8.1.2021 16:05  
 
 
Je potrebná príloha. Reálny XML súbor. A XLSM súbor, kde máte doterajšiu procedúru. Plus je treba aj v liste ukázať, tuto zadávam takýto parameter (parametre),a tuto chcem mať takýto výsledok. A to založené na tom skutočnom súbore XML. Tento Váš "XML" súbor mi nechce zožrať ani MSXML2.DOMDocument, ani MSXML2.DOMDocument60, ani Msxml2.DOMDocument.3.0, a nefičí mi na tom takmer nič (getElementsByTagName, getElementsByClassName, getElementById), dokonca mi nedá ani Children. :(
Odpověď
Honza | 8.1.2021 17:22  
 
 
Omlouvam se, ja jsem rano omylem zkopcil cast chybneho souboru. V priloze je funkcni kde uz dana procedura funguje a zobrazuje najednou vsechny udaje ktere potrebuju z xml dostat, ale jednotlive a adresne. Ja to momentalne pouzivam v accessu, ale bude se to delat i v excelu, na kod by to nemelo mit vliv. Vstup parametru funkce atd. si osetrim pozdeji, pro zjednoduseni jsem uvadel jen tu cast ktera mi dela problem, tj. nacitani z xml. Vystup jde na zkousku do tetxtoveho pole ve formulari ktere se jmenuje "import".
Odpověď
Honza | 8.1.2021 17:29  
 
 
Pro poradek tady je jeste ta procedura, v te puvodni jsem mel 2x definovanovanou stejnou promennou.
Odpověď
elninoslov | 9.1.2021 01:03  
 
 
Napadá ma zatiaľ iba prehľadať kolekciu vyselektovaných elementov, a zistiť nadradený Nod a názov špecifikácie. To je to, čo som sa od Vás nedozvedel, ako chcete identifikovať presnú hodnotu, keď sú ešte aj inak vnorené. Pridal som aj inú verziu pre prípad, keď budete chcieť načítať z XML viac hodnôt. Pretože čítať veľa krát z rovnakého súboru je neefektívne. Preto sa vytvorí ľahko kľúčom prehľadateľná kolekcia týchto elementov.
Odpověď
Honza | 11.1.2021 08:38  
 
 
Ahoj, dik za priklad. Musim to prozkoumat Vas pristup, VBA se zabyvam tak 14dnu, takze to jde ztuha :-) Byl jsem pres vikend na chate mimo signal a podarilo se mi sesmolit to co je v priloze. Zda se ze to funguje, jen je problem ze to vyhodi chybu kdyz dany uzel neexistuje. Ty xml soubory vytvari vyrobni stroj a jsou pokazde jine a obcas dost chaoticky usporadane.
Odpověď
elninoslov | 11.1.2021 11:05  
 
 
Takouto maskou som to chcel riešiť na začiatku, a keďže sa mi nepodarilo takú masku spáchať, tak som spravil prvé čo ma napadlo, prehľadať kolekciu. Píšete "chaotické". No a preto som sa na začiatku pýtal, ako viete identifikovať jednoznačne (jedinečný identifikátor) požadovanú hodnotu, keď sa volajú rovnako. V prípade masky, potrebujete vedieť presný strom uzlov. V prípade prehľadania kolekcie len priameho rodiča. Ale to iba za predpokladu, že ten priamy rodič je v celom súbore jedinečný. Toto je špecifická vec, ktorú nikto okrem Vás nevie, čo tie súbory znamenajú, ako sa tvoria, čo môže a nemôže nastať (duplicita rodiča?), a aké presne hodnoty budete potrebovať, či koľko úrovní sa treba vnárať pre požadovanú infošku... Inak odchytenie chyby je jednoduché.
Odpověď
Honza | 12.1.2021 20:00  
 
 
Dik moc za info. Duplicitni tam muze muze byt v podstate vsechno, jedinecna je jen kombinace uzlu a jejich atributu nebo jak se to spravne nazyva a podle toho najdu hodnotu. Mam jeste maly problem se syntaxi VBA. Vic jsem to popsal v prilozenem souboru. Snad bude pochopitelne co chci docilit.
Odpověď
elninoslov | 12.1.2021 20:16  
 
 
Ak chcete predať prvok tak predefinujte iba parameter funkcie: Function Zkontroluj(ByRef Pole As Control) As String. Ak chcete volať funkciu bez návratu tak Zkontroluj delka, a ak s návratom tak Zkontroluj (delka).
Odpověď
Honza | 12.1.2021 20:31  
 
 
Ja bych potreboval vyuzit obe varianty, v tomto pripade na zaklade hodnoty pole zmenit barvu jeho pozadi.
Odpověď
elninoslov | 13.1.2021 01:24  
 
 
Naozaj neviem, čo potrebujete urobiť, a ako to chcete použiť. Dotazoval som prílohu, no nie TXT, ale Excelácky súbor. Nech si nemusím všetko vytvárať a skúšať sám. Dotazoval som aj to, koľko takých hodnôt budete načítavať. Ak 1000, tak to nemôžete robiť po jednom, treba pozerať aj na rýchlosť. Dotazoval som sa aj na to, je jedinečný identifikátor spojenie priamonadriadeného uzla s názvom atribútu. Lebo vy v tom SingleNode hľadáte presnú štruktúru nadnodov a podnodov až po ten, ktorý chcete. Ale sám píšete, že neviete, kde sa bude v ktorom uzle nachádzať. Čo s Vami? :):)
Odpověď
elninoslov | 13.1.2021 10:41  
 
 
Este ma dnes napadla jedna možnosť, úplne primitívne rozdelenie raťazca a tak získanie hodnoty (metódy Unit_Split a xml_load3)
Odpověď
elninoslov | 13.1.2021 11:36  
 
 
Oprava, ešte jedno Split tam musí byť, aby nebralo hodnotu z nasledujúceho uzla: Unit_Split = Split(Split(Split(Split(WorksheetFunction.Trim(input$(LOF(F), #F)), "=""" & sParent & """>" & vbNewLine & " " & vbNewLine & " ")(1), "Odpověď
elninoslov | 13.1.2021 11:38  
 
 
Šmarjáá toto je tupý server ... takže prikladám normálnu prílohu.
Odpověď
Honza | 13.1.2021 20:06  
 
 
Dik moc za rady, vse uz funguje jak ma. VBA je mnohem rozsahlejsi nastroj nez jsem si puvodne myslel, mel jsem za to ze je to jen nejake udelatko na makra. Momentalne programuju neco v jakemsi podivnem jazyku ktery si vymyslel vyrobce grafickych chipu pro dotykove displeje a tak se mi trochu mota i syntaxe. V kazdem pripade jeste jednou dekuji za cenne rady a az otevrou hospody dam si panaka na vase zdravi :-)
Odpověď
elninoslov | 13.1.2021 20:33  
 
 
To by som terazky fakt potreboval, bo zdravie mám zrovna dosť podlomené. Tak budem na Vás spoliehať :) :)
Odpověď
micky | 23.1.2021 19:11  
 
 
Dobry den. Chcel by som sa opytat ci je mozne spravit nieco take ako posielam v prilohe. (v jednom priecinku mam 2 xml.. moze ich byt aj 10) a potreboval by som nacitat udaje z kazde XML pekne za sebou - tak ako to je vv "vys.xlsm". V kazdom riadku potrebujem aj udaj "gpc" aby som neskor vedel priradit riadok k spravnemu suboru.
Odpověď
micky | 23.1.2021 19:12  
 
 
a xml 1
Odpověď
micky | 23.1.2021 19:12  
 
 
a xml 2
Odpověď