Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
sakunne
HV veteran

liitunud: 15.12.2004
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
11.03.2012 18:02:13
|
|
|
xpath'i pole varem pruukinud kuid 5min googeldamise tulemusena jäi mulje, et säärases formaadis "xml"'ist on pagana keerukas miskit välja võtta sellega. Xpath pigem eeldaks, et sul on asjad stiilis <item><stockcode>1</stockcode><availiability>1</availiability></item>. Foreachiga sealt <tr>'ide seest sellisel kujul info otsimine on samuti paras porno kuubis.
Kui tihti tollest XML'ist on tarvis andmeid välja otsida ning kui suured failid on? Kui fail vähegi suurem või otsingut on tarvis teha rohkem kui paar-kolm korda siis üsna kindlasti oleks mõttekam see kasvõi ajutiselt andmebaasi lükata ja seal otsas päringuid teha.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
11.03.2012 18:35:22
|
|
|
DOM'iga ma sain nii:
<?php
$dom = new DOMDocument();
$dom->load('full_availability.xml');
$xpath = new DOMXPath($dom);
$Result = $xpath->query('//Line[ExtProdGroup="0204"]');
... |
''foreach' rida, töötab:
foreach($Result as $Line)
{
if( $Line->ExtProdGroup == '0204' && $Line->Availability != '0' )
{ ...
|
Tahaks veel proovida 'SimpleXML' ja 'xpath':
$Result = new SimpleXMLElement('full_availability.xml', null, true);
...
|
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
11.03.2012 19:43:04
|
|
|
Midagi sellist?
$xml = new SimpleXMLElement('full_availability.xml', null, true);
$result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability=1]'); |
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
11.03.2012 21:10:19
|
|
|
Just seda oligi tarvis - mul selle 'xpath' süntaksiga raskusi
Siin on need võimalused ühe ja sama tulemuse saamiseks:
$dom = new DOMDocument();
$dom->load('full_availability.xml');
$xpath = new DOMXPath($dom);
$Result = $xpath->query('//Line[ExtProdGroup="0204"]'); |
$Result = new SimpleXMLElement('full_availability.xml', null, true);
... ... ... ...
foreach($Result as $Line)
{
if( $Line->ExtProdGroup == '0204' && $Line->Availability != '0' )
{ ... |
$xml = new SimpleXMLElement('full_availability.xml', null, true);
$Result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]');
|
... kui kedagi peaks huvitama
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
matis
HV kasutaja

liitunud: 12.04.2004
|
|
Kommentaarid: 64 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
60 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
26.03.2012 12:38:53
|
|
|
Kasutasin seda varianti:
$xml = new SimpleXMLElement('full_availability.xml', null, true);
$Result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]'); |
Nüüd oleks vaja saada teisest .xml failist 'Hind', siduda nad omavahel tootekoodi alusel ja siis selle järgi sorteerida.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
26.03.2012 12:54:12
|
|
|
Sääraste sidumise-sortimise puhul tahaks kohe väga teada mis hea põhjus sul küll olla võib et sa tahad andmebaasi asemel xml'i kasutada
Igatahes säärase sidumise pead sa xml'is minu teada täiesti käsitsi tegema ühekaupa asju läbi käies mis on igatepidi ebaefektiivne.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
26.03.2012 13:07:40
|
|
|
Ho Ho kirjutas: |
Sääraste sidumise-sortimise puhul tahaks kohe väga teada mis hea põhjus sul küll olla võib et sa tahad andmebaasi asemel xml'i kasutada
Igatahes säärase sidumise pead sa xml'is minu teada täiesti käsitsi tegema ühekaupa asju läbi käies mis on igatepidi ebaefektiivne. |
http://www.w3schools.com/xquery/default.asp on selle jaoks täiesti olemas
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
26.03.2012 13:32:40
|
|
|
Ho Ho kirjutas: |
Sääraste sidumise-sortimise puhul tahaks kohe väga teada mis hea põhjus sul küll olla võib et sa tahad andmebaasi asemel xml'i kasutada  |
Põhjus lihtne - ma ei saa andmebaasile ligi - see on osa suurest laosüsteemist ... niiet ... Kõiksuse Looja, anna mulle jõudu leppida asjadega, mida muuta ei saa
$xml = new SimpleXMLElement('full_availability_3.xml', null, true);
$xml_price = new SimpleXMLElement('price.xml', null, true);
$Result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]'); |
Kui siin see 'Result' nüüd vastavalt vormistada, saaks ehk asja käima
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
26.03.2012 13:47:48
|
|
|
sakunne kirjutas: |
Ho Ho kirjutas: |
Sääraste sidumise-sortimise puhul tahaks kohe väga teada mis hea põhjus sul küll olla võib et sa tahad andmebaasi asemel xml'i kasutada  |
Põhjus lihtne - ma ei saa andmebaasile ligi - see on osa suurest laosüsteemist ... niiet ... Kõiksuse Looja, anna mulle jõudu leppida asjadega, mida muuta ei saa |
Kui mõeldamatu on teha (ajutine) kohalik andmebaas? Kasvõi sqlite'i oma. Kui andmehulk vähegi suuremaks läheb siis säärane XML'i otsa ehitatud pornograafia saab olema väga valus. Endal ka praegu ühe süsteemi arendamine pooleli kus üritatakse XML'i andmebaasina kasutada, vääääga valus
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
26.03.2012 15:29:05
|
|
|
Ho Ho kirjutas: |
sakunne kirjutas: |
Ho Ho kirjutas: |
Sääraste sidumise-sortimise puhul tahaks kohe väga teada mis hea põhjus sul küll olla võib et sa tahad andmebaasi asemel xml'i kasutada  |
Põhjus lihtne - ma ei saa andmebaasile ligi - see on osa suurest laosüsteemist ... niiet ... Kõiksuse Looja, anna mulle jõudu leppida asjadega, mida muuta ei saa |
Kui mõeldamatu on teha (ajutine) kohalik andmebaas? Kasvõi sqlite'i oma. Kui andmehulk vähegi suuremaks läheb siis säärane XML'i otsa ehitatud pornograafia saab olema väga valus. Endal ka praegu ühe süsteemi arendamine pooleli kus üritatakse XML'i andmebaasina kasutada, vääääga valus  |
Kui asju nii teha
Ho Ho kirjutas: |
Igatahes säärase sidumise pead sa xml'is minu teada täiesti käsitsi tegema ühekaupa asju läbi käies mis on igatepidi ebaefektiivne. |
siis loogiline, et asi valusaks muutub. Kui on reaalne vajadus XML baasi järgi (mitte lihtsalt et nalja pärast asendame RDBMSi XML'ga), siis on asi igati omal kohal ja sel juhul hakata seda päringute tegemiseks relatsiooniliseks teisendama on veelgi valusam, kui mitte suisa pornograafia.
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
26.03.2012 16:18:00
|
|
|
Päris relatsiooniliseks asi ehk ei lähe:
$xml = new SimpleXMLElement('full_availability.xml', null, true);
$xml_price = new SimpleXMLElement('price.xml', null, true);
$Result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]'); |
Esimesest failist valida read, mis vastavad : [ExtProdGroup="0204" and Availability != 0 ] ja siis failist 'price.xml' sama koodiga toodete hinnad ('kood' väli on mõlemal ühine)
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
26.03.2012 16:22:14
|
|
|
Juba üsna teema alguses küsisin (kuid vastuseta jäin), et kui tihti samu andmeid töödeldakse. Kui tõesti on andmed vaja ainult korra läbi töötada siis jah ei oma see erilist mõtet, kui paar-kolm korda või rohkem siis juba hakkaks üsna tõsiselt baasiks teisendamise peale mõtlema.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
26.03.2012 16:33:05
|
|
|
Ho Ho kirjutas: |
Juba üsna teema alguses küsisin (kuid vastuseta jäin), et kui tihti samu andmeid töödeldakse. Kui tõesti on andmed vaja ainult korra läbi töötada siis jah ei oma see erilist mõtet, kui paar-kolm korda või rohkem siis juba hakkaks üsna tõsiselt baasiks teisendamise peale mõtlema. |
2x tunnis
A'kas selline päring on xml puhul siis nii keeruline
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
26.03.2012 16:57:13
|
|
|
Sõltub kui suurtest andmehulkadest jutt käib. Ise tegin lihtsamaid "päringuid" üle paari megase XML'i ning ega see eriti hästi jõudlusele ei mõjunud.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
26.03.2012 19:56:52
|
|
|
Mõlemad failid on kuskil <5 MB veidi alla 39k rea
Selline parsib päris kähku
$xml = new SimpleXMLElement('full_availability.xml', null, true);
$Result = $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]');
|
Samuti see:
$xml_price = new SimpleXMLElement('price.xml', null, true);
$Result2 = $xml_price->xpath('//Line[StockCode <= 499999]');
|
Kuidas neid kokku panna ... vat see on küsimus
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
26.03.2012 23:43:47
|
|
|
php:
|
$xml = simplexml_load_file('result.xml'); foreach ( $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]') as $r) { $code = (string)$r->StockCode; 'stockcode' => $code, 'description' => (string)$r->Description, ); } $xml = simplexml_load_file('prices.xml'); foreach ($xml->xpath('//Line[StockCode <= 499999]') as $r) { $code = (string)$r->StockCode; if (! isset($list[$code])) continue; $list[$code]['price'] = (string)$r->Price; }
|
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
andresv
HV kasutaja
liitunud: 06.12.2004
|
28.03.2012 10:40:56
|
|
|
kui mu mälu mind ei peta, siis "//" kasutamine xpathi alguses on väga ebaeffektiivne, seega kui võimalik tuleks seal full path-i kasutada: "/Result/Line"
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
sakunne
HV veteran

liitunud: 15.12.2004
|
30.03.2012 13:53:18
|
|
|
andresv kirjutas: |
kui mu mälu mind ei peta, siis "//" kasutamine xpathi alguses on väga ebaeffektiivne, seega kui võimalik tuleks seal full path-i kasutada: "/Result/Line" |
Võtan arvesse
nemu kirjutas: |
php:
|
$xml = simplexml_load_file('result.xml'); foreach ( $xml->xpath('//Line[ExtProdGroup="0204" and Availability != 0 ]') as $r) { $code = (string)$r->StockCode; 'stockcode' => $code, 'description' => (string)$r->Description, ); } $xml = simplexml_load_file('prices.xml'); foreach ($xml->xpath('//Line[StockCode <= 499999]') as $r) { $code = (string)$r->StockCode; if (! isset($list[$code])) continue; $list[$code]['price'] = (string)$r->Price; }
|
|
Mul õnnestus saada ligipääs sinna, kus neid .xml faile tekitatakse - seega teen oma vajadustele vastava .ml fili, ning kaob vajadus mööda mitut .xml'i sobrada, tänud igatahes
Kuidas väljundit sorteerida
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
69 |
|
tagasi üles |
|
 |
andresv
HV kasutaja
liitunud: 06.12.2004
|
30.03.2012 15:56:32
|
|
|
midagi sellist näiteks
php:
|
uasort($list, function ($item1, $item2) { if ($item1['price'] == $item2['price']) { return 0; } return ($item1['price'] < $item2['price']) ? -1 : 1; });
|
võrdema peaksid siis ikka hindu numbri kujul mitte tekstina
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
|