Kuinka luoda xml-tiedosto ohjelmasta. Lyhyt kuvaus XML-tiedoston luomisesta XSD-skeemaa käyttämällä esimerkkiä Statistical Reporting for the Federal Customs Service -latauksen luomisesta

Organisaatiossa kirjanpitoa voidaan ylläpitää paitsi 1C:Enterprise-alustan ratkaisuissa, myös muissa ohjelmistojärjestelmissä (Galaktika, Parus, SAP jne.). Tämä nostaa haasteen kahden sovelluksen yhdistämisestä.

Esimerkiksi jonkin sovelluksen (kutsutaanko sitä "X"ksi) on luettava luettelo konfiguraatioasiakirjoista. Emme puhu tällaisen ongelman ratkaisemisen käytännön eduista. Huomaan vain, että kätevin ja yleismaailmallisella tavalla tällaisessa tilanteessa asiakirjaluettelo ladataan XML-muodossa.

Tätä muotoa käyttävä vaihto on universaali, koska useimmat sovellukset voivat toimia sen kanssa. Katsotaanpa, kuinka voit ladata luettelon määritysasiakirjoista XML-tiedostoon 1C:Enterprise-palvelusta.

Lataa XML-muotoon

Ja niin, siirrytään pääasiaan. Meidän täytyy käydä läpi asiakirjan metatietojen luettelo ja luoda luettelo XML-tiedostoon. Seuraavassa kuvakaappauksessa näkyy algoritmi XML-tiedoston luomiseksi:

Funktio CreateXML() Export // Hanki väliaikaisen tiedoston nimi Polku = GetTemporaryFileName() ; // Alusta "XML Record" -luokka Entry = Uusi merkintäXML; // Avaa väliaikainen tiedosto kirjoittamista varten- 8 " ) ; // Kirjoita XML-tiedoston ilmoitus Ennätys. WriteDeclarationXML() ; // Ennätys. WriteElementStart(" DocumentsConfigurations" ) ; // Ensimmäinen elementti // Ensimmäisen elementin attribuutti tiedoston luontipäivämäärällä Ennätys. WriteAttribute(" generated ", Format(CurrentDate(),), " DF = vvvv-KK- ppThh:mm:ss; DLF = DT" ) ) ; // Kirjoita jokaiselle konfigurointiasiakirjalle elementti. Laitamme asiakirjan nimen tekstiin. Jokaiselle metatiedon asiakirjalle. Asiakirjat Cycle Recording. WriteElementStart("Dokumentti"); Ennätys. WriteText(Dok.Nimi) ; Ennätys. WriteEndElement() ; EndCycle ; // Viimeistele ensimmäisen elementin kirjoittaminen Ennätys. WriteEndElement() ; Ennätys. Kiinni(); // Sulje tiedosto // Hae tiedoston binääritiedot ja laita se väliaikaiseen tallennustilaan BinaryData = uusi BinaariData(Path) ; Osoite = PlaceInTemporaryStorage (binaaridata, uusi yksilöllinen tunniste); Palautusosoite; // Palauta tiedoston osoite tallennustilaan EndFunction

Jokainen luotu elementti on täytettävä oikein. Kun "WriteStartofElement()" on suoritettu, "WriteEndElement()"-metodi on suoritettava, muuten XML-tiedoston rakenne on virheellinen.

Yleinen malli XML:n luominen-tiedostot on seuraava järjestys:

// 1. Alusta "XML Record" -luokka Entry = Uusi merkintäXML; // 2. Avaa väliaikainen tiedosto tallennusta varten Ennätys. OpenFile(polku, " UTF - 8 " ) ; // 3. Kirjoita XML-tiedoston ilmoitus Ennätys. WriteDeclarationXML() ; // // 4. ++ Kirjoita XML-tiedoston sisältö Ennätys. WriteElementStart("XMLElement"); Ennätys. WriteEndElement() ; // -- Kirjoita XML-tiedoston sisältö // 5. Sulje tiedosto Ennätys. Kiinni();

Nämä viisi vaihetta luovat melkein minkä tahansa XML-tiedoston.

Esimerkissämme luotu tiedosto muunnetaan binääritiedoksi ja palautetaan paikkaan, jossa CreateXML-funktiota kutsutaan. Tämä tiedosto voidaan sitten kirjoittaa tiedostojärjestelmään.

Voit nähdä esimerkin ladatusta tiedostosta yllä olevassa kuvakaappauksessa.

Kolmannen osapuolen sovellus

Esimerkkinä loin .NET Frameworkiin sovelluksen näyttääkseni XML-tiedoston lukemisen kolmannen osapuolen sovelluksessa.

Ohjelma lukee luodun tiedoston ja näyttää asiakirjat luettelon muodossa:

Voit kokeilla sitä itse, sovellus on ladattavissa artikkelin lopussa olevan linkin avulla.

Monipuolisuus

XML-muotoa käytetään useimmissa tiedonsiirtokokoonpanoissa välillä sovellusratkaisut 1C:Enterprise-alustalla. Toinen yleisesti käytetty viestintätapa on COM-yhteys. XML mahdollistaa vaihtamisen lähes minkä tahansa sovelluksen kanssa, minkä vuoksi sitä ansaitsee kutsua yleiseksi.

Ladattavat tiedostot:

XML-tiedostojen lukusovellus.

Käsitellään XML-tiedoston luomista.

XML on universaali muoto tietojen kanssa työskenteleminen. Sitä tukevat monet ohjelmat, mukaan lukien DBMS-alan ohjelmat. Siksi tiedon muuntaminen XML-muotoon on tärkeää juuri eri sovellusten välisen vuorovaikutuksen ja tiedonvaihdon kannalta. Excel on vain yksi ohjelmista, jotka toimivat taulukoiden kanssa ja voivat jopa käsitellä tietokantoja. Selvitetään kuinka muuntaa Excel-tiedostoja XML-muotoon.

Tietojen muuntaminen XML-muotoon ei ole niin yksinkertainen prosessi, koska tämän prosessin aikana on luotava erityinen skeema (schema.xml). Kuitenkin muuntaa tiedot yksinkertaiseksi tiedostoksi tästä formaatista Riittää, kun sinulla on tavalliset tallennustyökalut Excelissä käsillä, mutta hyvin jäsennellyn elementin luomiseksi joutuu paljon puuhailemaan kaavion laatimisessa ja liittämisessä dokumenttiin.

Tapa 1: Yksinkertainen tallennus

Excelissä voit tallentaa tiedot XML-muodossa yksinkertaisesti käyttämällä valikkoa "Tallenna nimellä…". Ei ole totta, että kaikki ohjelmat toimivat oikein tällä tavalla luodun tiedoston kanssa. Ja tämä menetelmä ei toimi kaikissa tapauksissa.


Näin tiedostojen muuntaminen Excelistä XML-muotoon saatetaan päätökseen.

Tapa 2: Kehittäjätyökalut

Muuntaa Excel-muodossa XML:ssä voit käyttää ohjelma-välilehden kehittäjätyökaluja. Lisäksi, jos käyttäjä tekee kaiken oikein, hän saa lähdössä toisin kuin edellinen menetelmä, täysimittainen XML-tiedosto, joka tulkitaan oikein kolmannen osapuolen sovelluksia. Mutta on sanottava heti, että jokaisella aloittelijalla ei välttämättä ole tarpeeksi tietoa ja taitoja oppiakseen välittömästi muuntamaan tietoja tällä tavalla.

  1. Oletuksena Kehittäjän työkalut -välilehti on poistettu käytöstä. Siksi sinun on ensin aktivoitava se. Siirry välilehdelle "Tiedosto" ja napsauta kohdetta "Vaihtoehdot".
  2. Siirry avautuvassa parametriikkunassa alaosioon "Muokkaa nauhaa". Valitse ikkunan oikealla puolella oleva valintaruutu arvon vieressä "Kehittäjä". Napsauta sen jälkeen painiketta "OK" sijaitsee ikkunan alaosassa. Kehittäjätyökalut-välilehti on nyt käytössä.
  3. Avaa seuraavaksi Excel-taulukko ohjelmassa millä tahansa sopivalla tavalla.
  4. Sen perusteella meidän on luotava kaavio, joka voidaan luoda millä tahansa tekstieditorilla. Näihin tarkoituksiin voit käyttää tavallista Windowsin Muistio, mutta ohjelmointiin ja merkintäkielten kanssa työskentelemiseen on parempi käyttää erikoissovellusta. Aloitetaan tämä ohjelma. Luomme siihen kaavion. Esimerkissämme se näyttää alla olevan Notepad++-ikkunan kuvakaappauksen mukaisesti.

    Kuten näet, koko asiakirjan avaus- ja sulkemistunniste on "tietojoukko". Tagilla on sama rooli jokaisella rivillä "ennätys". Kaavalle riittää, jos otamme vain kaksi riviä taulukosta, emmekä käännä sitä kaikkea manuaalisesti XML:ksi. Sarakkeen avaus- ja sulkemistunnisteen nimi voi olla mielivaltainen, mutta sisään tässä tapauksessa Mukavuuden vuoksi valitsimme yksinkertaisesti kääntää venäläiset sarakkeiden nimet englanniksi. Kun tiedot on syötetty, tallennamme ne tekstieditorin kautta mihin tahansa kiintolevylle XML-muodossa nimellä "skeema".

  5. Mennään taas Excel ohjelma jo auki olevan pöydän kanssa. Siirtyminen välilehdelle "Kehittäjä". Työkalulaatikon nauhalla "XML" napsauta painiketta "Lähde". Napsauta painiketta ikkunan vasemmalla puolella avautuvassa kentässä "XML-kartat...".
  6. Napsauta avautuvassa ikkunassa painiketta "Lisätä…".
  7. Lähteen valintaikkuna avautuu. Mene hakemistoon, johon kaavio on aiemmin koottu, valitse se ja napsauta painiketta "Avata".
  8. Kun kaavion elementit ovat ilmestyneet ikkunaan, vedä ne kohdistimella taulukon sarakkeiden nimien vastaaviin soluihin.
  9. Napsauta tuloksena olevaa taulukkoa hiiren kakkospainikkeella. Selaa kohdat peräkkäin kontekstivalikossa "XML" Ja "Viedä…". Tallenna sen jälkeen tiedosto mihin tahansa hakemistoon.

Kuten näet, on kaksi päätapaa muuntaa XLS- ja XLSX-tiedostoja XML-ohjelma Microsoft Excel. Ensimmäinen niistä on äärimmäisen yksinkertainen ja koostuu perustallennusmenettelystä tietyllä laajennuksella toiminnon kautta "Tallenna nimellä…". Yksinkertaisuus ja selkeys tämä vaihtoehto ovat epäilemättä etuja. Mutta sillä on yksi erittäin vakava haittapuoli. Muunnos suoritetaan ottamatta huomioon tiettyjä standardeja, ja siksi kolmannen osapuolen sovellukset eivät välttämättä tunnista tällä tavalla muunnettua tiedostoa. Toinen vaihtoehto sisältää XML-kartan laatimisen. Toisin kuin ensimmäinen menetelmä, tällä skeemalla muunnettu taulukko täyttää kaikki XML-laatustandardit. Mutta valitettavasti jokainen käyttäjä ei pysty nopeasti ymmärtämään tämän menettelyn vivahteita.

Johdatus oikeaan merkintään

XML tarkoittaa Extensible Markup Language painottaen merkintä(merkintä). Voit luoda tekstiä ja merkitä sen kehystunnisteilla, jolloin jokainen sana, lause tai fragmentti muuttuu tunnistettavaksi, lajiteltavaksi tiedoksi. Luomasi tiedostot tai asiakirjan kopioita, koostuu elementeistä (tunnisteista) ja tekstistä, ja elementit auttavat ymmärtämään asiakirjaa oikein paperille luettaessa tai jopa käsittelemään sitä sähköisesti. Mitä enemmän kuvailevia elementtejä, sitä enemmän asiakirjan osia voidaan tunnistaa. Merkinnän alkuajoista lähtien yksi sen eduista on, että jos se katoaa tietokonejärjestelmä painettu tiedot edelleen luettavissa tagien ansiosta.

Merkintäkielet ovat kehittyneet ensimmäisistä yritysten ja valtion virastojen luomista lomakkeista Vakiokieli Generalized Markup Language (SGML), Hypertext Markup Language (HTML) ja lopulta XML. SGML saattaa tuntua monimutkaiselta, ja HTML (joka oli aluksi vain kokoelma elementtejä) on osoittautunut riittämättömäksi tunnistamaan tietoa. XML on suunniteltu helppokäyttöiseksi ja helposti laajennettavaksi merkintäkieleksi.

XML:ssä voit luoda oman omia elementtejä, jonka avulla voit esittää tietoja tarkasti. Asiakirjoja ei voi vain jakaa kappaleisiin ja otsikoihin, vaan myös asiakirjan sisältämät fragmentit voidaan korostaa. Jotta tämä olisi tehokasta, sinun on määritettävä lopullinen luettelo elementeistäsi ja pysyttävä siinä. Elementit voidaan määrittää asiakirjatyyppimääritelmässä (DTD) tai skeemassa, kuten alla käsitellään lyhyesti. Kun olet oppinut ja aloittanut XML:n käytön, älä pelkää kokeilla elementtien nimiä luodessasi todellisia tiedostoja.

XML-dokumentin rakentaminen

Kuten mainittiin, XML-tiedostot koostuvat tekstistä ja merkinnöistä. Suurin osa tekstistä sijoitetaan elementteihin, joissa tekstiä ympäröivät tunnisteet. Oletetaan esimerkiksi, että haluat luoda keittokirjan XML-muodossa. Meillä on resepti nimeltä Pehmis, joka on muutettava XML-muotoon. Merkitsemme reseptin nimen liittämällä sen tekstin elementtiin, joka alkaa ja päättyy tunnisteilla. Tätä elementtiä voidaan kutsua reseptinimiksi. Merkitse elementin alkutunniste asettamalla sen nimi kulmasulkeihin<>), kuten tämä: . Kirjoita sitten teksti Ice Cream Sundae. Tekstin jälkeen laitamme lopputunnisteen, joka on elementin nimi kulmasuluissa, sekä elementin nimen eteen vinoviiva (/) seuraavasti:. Nämä tunnisteet muodostavat elementti, johon voit kirjoittaa tekstiä ja jopa muita elementtejä.

Elementeille voidaan luoda nimiä yksittäisiä asiakirjoja, ja asiakirjaryhmille. Voit määrittää tarpeidesi mukaan säännöt, joita elementeille on noudatettava. Elementit voivat olla täysin erityisiä tai melko yleisiä. Säännöissä on myös määriteltävä, mitä kuhunkin elementtiin voidaan sisällyttää. Ne voivat olla tiukkoja, väljiä tai siltä väliltä. Luo yksinkertaisesti elementtejä, jotka määrittelevät asiakirjasi tärkeät osat.

Aloita XML-tiedoston luominen

XML-dokumentin ensimmäinen rivi voi olla XML-ilmoitus. Tämä valinnainen osa tiedosto määrittelee sen XML-tiedostoksi, mikä voi auttaa automaattiset työkalut ja saada ihmiset tunnistamaan tiedoston XML-muodossa SGML- tai muun merkinnän sijaan.

Ilmoitus saattaa näyttää yksinkertaisesti tältä tai sisällytä XML-versio ( ) ja jopa merkkikoodaus, esimerkiksiUnicodelle. Koska tämän ilmoituksen pitäisi olla aivan tiedoston alussa, jos aiot yhdistää pieniä XML-tiedostoja suuremmaksi tiedostoksi, tämä valinnainen elementti Parempi ohittaa se.

Juurielementin luominen

Aloitus- ja lopputunnisteet juurielementti ympäröivät XML-dokumentin koko tekstin. Tiedostossa saa olla vain yksi juurielementti, ja tämä on sen vaadittava "cover". näyttää katkelman tässä käyttämästäni esimerkistä juurielementin kanssa (resepti). ( Täysi tiedosto XML on annettu muodossa.)

Listaus 1. Juurielementti

Kun luot asiakirjaa, sijoitat väliin tekstiä ja lisätunnisteita Ja .

Elementtien nimet

Kirjainmerkintä tunnisteissa

Kun luot XML:ää, alku- ja lopputunnisteiden kirjainkoon on vastattava. Muussa tapauksessa saatat saada virheilmoituksen, kun käytät tai katselet XML:ää. Esimerkiksi Internet Explorer ei näytä tekstiä, jos kirjainkoko ei täsmää. Sen sijaan se näyttää viestejä aloitus- ja lopputunnisteiden välisestä ristiriidasta.

Meillä on siis juurielementti . XML:ssä valitaan ensin elementin nimet ja sitten vastaava DTD-kuvaus tai -skeema määritetään näiden nimien perusteella. Nimet voivat sisältää kirjaimia, numeroita ja erikoismerkkejä, kuten alaviivaa (_). Tässä on muutamia nimien muistamista koskevia sääntöjä:

  • Elementtien nimissä ei saa olla välilyöntejä.
  • Nimen tulee alkaa kirjaimella, ei numerolla tai merkillä. (Tämän ensimmäisen kirjaimen jälkeen voit käyttää mitä tahansa kirjainten, numeroiden ja kelvollisten symbolien yhdistelmää.)
  • Tapauksella ei ole väliä, mutta muista seurata sitä sekaannusten välttämiseksi.
Listaus 2. Muut elementit
Pehmis 5 minuuttia

XML-dokumentti voi sisältää tyhjiä tunnisteita, joissa ei ole mitään sisällä, ja ne voidaan ilmaista yhtenä tunnisteena mieluummin kuin aloitus- ja lopputunnisteiden parina. Tämä voi olla esimerkiksi erillinen tunniste HTML-tyyli . Se ei sisällä lapsielementtejä tai tekstiä, joten se on tyhjä elementti ja se voidaan kirjoittaa muodossa (välilyönnillä ja lopussa tutulla kauttaviivalla).

Sisäkkäiset elementit

Liite on elementtien sijoittaminen muiden elementtien sisään. Näitä uusia elementtejä kutsutaan tytäryhtiöt elementtejä, ja niitä ympäröivät elementit ovat heidän vanhemmat elementtejä. Juurielementissä useita elementtejä on sisäkkäin. Nämä ovat sisäkkäisiä lapsia , Ja Elementin sisällä on useita identtisiä lapsielementtejä . Nesting voi tehdä XML-dokumentista monitasoisen.

Yleinen syntaksivirhe sisältää ylä- ja alaelementtien sisäkkäisyyden. Jokainen alielementti on sijoitettava kokonaan sen pääelementin avaus- ja sulkemistunnisteiden väliin. Lapsielementtien tulee päättyä ennen kuin seuraava lapsi alkaa.

Tässä on esimerkki oikeasta liitteestä. Tunnisteet alkavat ja päättyvät ilman kutoa muiden tunnisteiden kanssa.

Listaus 3. XML-elementtien oikea sisäkkäisyys.
Pehmis 3 suklaasiirappia tai suklaafudgea 1 pähkinät 1 kirsikka 5 minuuttia

Attribuuttien lisääminen

Elementtejä lisätään joskus Attribuutit. Attribuutit koostuvat nimi-arvo-parista, jossa arvo on lainausmerkeissä ("), kuten: type="dessert" . Attribuuttien avulla voit tallentaa elementin mukana Lisävaihtoehdot, muuttaa näiden parametrien arvoja elementistä toiseen samassa asiakirjassa.

Attribuutti – tai jopa useita määritteitä – määritetään elementin aloitustunnisteessa: . Kun lisäät useita määritteitä, ne erotetaan välilyönnillä: . näyttää XML-tiedoston sellaisena kuin se nyt näyttää.

Listaus 4. XML-tiedostomme elementteineen ja attribuuteineen
Pehmis 5 minuuttia

Mitä tahansa määritteitä voidaan käyttää. Mieti, mitä tietoja voit lisätä asiakirjaasi. Attribuutit ovat erityisen hyödyllisiä, jos dokumentteja tallennetaan - esimerkiksi reseptityypin mukaan. Attribuuttien nimet voivat sisältää samoja merkkejä kuin elementtien nimet, samoilla säännöillä välilyöntien poissulkemiselle ja nimen aloittamiselle kirjaimella.

Oikein ja väärin rakennettu XML

Jos noudatat kehyksessäsi määritettyjä sääntöjä, voit helposti luoda hyvin muotoiltua XML-koodia. Oikea XML on XML-koodi, joka on koottu noudattaen kaikkia XML-sääntöjä: elementtien oikea nimeäminen, liite, attribuuttien nimeäminen jne.

Riippuen siitä, mitä tarkalleen ottaen teet XML:llä, saatat joutua työskentelemään hyvin muotoillun XML:n kanssa. Harkitse yllä olevaa esimerkkiä lajittelusta reseptityypin mukaan. On välttämätöntä, että elementit sisällä tyypin attribuutti. On erittäin tärkeää pystyä testaamaan koodia ja varmistaa, että tämän attribuutin arvo on aina olemassa.

Vahvistus käynnissä (vahvistus) viittaa asiakirjarakenteen tarkistamiseen sille asetettujen sääntöjen noudattamisen suhteen ja kunkin pääelementin alielementtien määrittelyyn. Nämä säännöt on määritelty kohdassa Asiakirjan tyypin kuvaus(DTD) tai kaaviossa. Tämän tyyppinen validointi edellyttää, että luot DTD:n tai skeeman ja viittaat sitten DTD- tai skeematiedostoon XML-tiedostoissasi.

Vahvistuksen mahdollistamiseksi sinun on asetettava asiakirjatyypin ilmoitus (DOCTYPE) lähelle XML-asiakirjojen alkua. Tämä rivi sisältää linkin DTD:hen tai skeemaan (elementtien ja sääntöjen luettelo), jota käytetään varmentamiseen tästä asiakirjasta. DOCTYPE-merkkijono voi olla jotain samanlaista kuin .

Listaus 5. DOCTYPE

Tämä esimerkki tarkoittaa, että nimikeluettelotiedostosi on nimeltään tiedostonimi.dtd sijaitsee tietokoneessasi (eli JÄRJESTELMÄ-hakemistossa, ei julkisessa PUBLIC-hakemistossa).

Entiteettien käyttäminen

Entiteetit voivat olla tekstinpätkiä tai erikoismerkkejä. Ne voidaan määrittää asiakirjan sisällä tai sen ulkopuolella. Virheiden välttämiseksi ja oikein näyttämiseksi entiteetit on ilmoitettava ja ilmaistava oikein.

Erikoismerkkejä ei voi kirjoittaa suoraan tekstiin. Tekstissä käytettäväksi erikoismerkit niistä on tehtävä entiteettejä ja näiden merkkien koodeja on käytettävä. Voit määrittää lauseita, kuten yrityksen nimen, kokonaisuuksiksi ja käyttää niitä sitten koko tekstissäsi. Luodaksesi entiteetin, anna sille nimi ja lisää se ja lisää nimi tekstiin et-merkin (&) jälkeen ja joka päättyy puolipisteeseen – esimerkiksi (tai muuhun nimeen). Kirjoita sitten tämä koodi DOCTYPE-rivillesi hakasulkeet(), kuinka sisään . Tämä koodi määrittää tekstin, joka korvaa entiteetin.

Listaus 6. Entiteetti

Entiteettien käyttäminen auttaa välttämään saman lauseen tai tiedon toistamista yhä uudelleen ja uudelleen. Se voi myös helpottaa tekstin muokkaamista (esimerkiksi jos yritys muuttaa nimeään) useissa paikoissa kerralla yksinkertaisesti määrittämällä kokonaisuuden määritysmerkkijono.

Kuinka välttää virheitä

Kun opettelet luomaan XML-tiedostoja, avaa ne sisään XML-editori varmistaakseen niiden muodollisen oikeellisuuden ja varmistaakseen, että XML-sääntöjä noudatetaan. Jos sinulla on esimerkiksi Windows® Internet Explorer®, voit yksinkertaisesti avata XML-tiedoston selaimessa. Jos elementit, määritteet ja teksti näkyvät, XML-tiedosto on laadittu oikein. Jos on virheitä, olet luultavasti sotkenut jotain syntaksissa, ja sinun on tarkistettava huolellisesti asiakirjasi kirjoitusvirheiden tai puuttuvien tunnisteiden ja välimerkkien varalta.

Johtopäätös

Oppinut muutaman yksinkertaiset säännöt, sinulla on joustavuus kehittää omia XML-elementtejäsi ja niiden ominaisuuksia. XML-säännöt eivät ole monimutkaisia. XML-dokumentin kirjoittaminen on myös helppoa. Tärkeintä on ymmärtää, mitä haluat asiakirjoiltasi lajittelu- ja hakuominaisuuksien suhteen, ja sitten suunnitella elementtejä ja attribuutteja näiden vaatimusten täyttämiseksi.

Kun ymmärrät tarkoituksesi hyvin ja osaat merkitä tekstisi, voit luoda tehokkaita elementtejä ja attribuutteja. Tästä näkökulmasta huolellinen merkintä on kaikki mitä tarvitaan hyvin muotoillun ja käyttökelpoisen XML-dokumentin luomiseen.

1. Esittely

Jos joku teistä on koskaan yrittänyt oppia XML:ää itse, olette saattanut kohdata monia samoja hämmentäviä käsitteitä kuin minä aiemmin. DTD, XML Schema, nimitilat, XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, luovutan. Lisään vain, että suurin osa näistä materiaaleista perustuu toteutuksiin, joiden koodissa saattaa olla virheitä. On luultavasti miljoonia tapoja toteuttaa ja käyttää XML:ää, mutta ne voivat kaikki olla melko monimutkaisia. Ja tiedäthän, XML voi olla hyvin yksinkertaista. Jos unohdamme DTD:n, XML-skeemat, nimitilat jne.
Yritän opettaa sinulle nopeasti XML:n käytön, jos mahdollista, jätän huomioimatta kohtuullisen määrän tietoa, jonka voit jo lukea asiaankuuluvasta kirjallisuudesta. Ja ensimmäinen asia, jonka aion jättää huomiotta, ovat nimitilat ja skeemat. Tämä saattaa tuntua sinusta oudolta, koska useimmat kirjat alkavat selittää näitä käsitteitä, mutta yritä ajatella XML:ää keinona ratkaista tietty ongelma, kuten vasara. Tarvitseeko sinun todella tietää kuinka rakentaa talo käyttääksesi vasaraa? Mitä jos tarvitsen vain vasaralla naulan kiinnittääkseni kuvan? Se on sama XML:n kanssa, se voi olla hyvin monimutkaista, tarpeeksi yleistä käytettäväksi sadoissa ellei tuhansissa sovelluksissa ja hyvin yksinkertainen, jos et kiinnitä huomiota muutamaan asiaan. Tässä artikkelissa keskityn tiettyjen ongelmien ratkaisemiseen XML:n avulla.
Mikä siis tarkalleen ottaen on ongelma? Oletetaan, että haluan kuvata yksinkertaista esinettä, kuten lasia, XML:n avulla. Miksi aion käyttää XML:ää tähän? No, ensinnäkin, juuri sitä varten XML on suunniteltu. XML kuvaa tiedot. Esimerkissäni lasi on data. Elämässä data voi olla Word-asiakirjoja, arkkeja laskentataulukoita, kuvia, kirjaa, tietokantamerkintää tai jopa C++-luokkia tai Visual Basic. Toiseksi XML on laajennettavissa. XML antaa minulle mahdollisuuden luoda niin monta ominaisuutta kuin on tarpeen tietojen kuvaamiseksi, ja nämä ominaisuudet ovat mitä haluan. Ja lopuksi, koska XML:stä on nopeasti tulossa standardi. Jos Marsissa on elämää, voit olla varma, että he ymmärtävät XML-tiedostoni siellä.

Mitkä perusominaisuudet mahdollistavat lasin kuvaamisen?

Miltä sama asia näyttäisi XML-muodossa?

lasi 6 16 jääkuutio olki vettä Joo

Huomaa, että tiedoston ensimmäinen rivi () on tällä hetkellä erityinen ulkoasu, muista vain, että sen pitäisi olla täällä. XML-muodon kauneus on, että kuka tahansa voi ymmärtää, mitä siinä sanotaan vain katsomalla sitä tarkasti. On myös selvää, että tämä ei ole lasin ainoa mahdollinen XML-kuvaus. Jos pyydän 10 ihmistä kehittämään XML-kuvauksen lasista, jolla on samat ominaisuudet, he todennäköisesti kaikki luovat erilaisia ​​mutta oikeita kuvauksia. Tässä ongelma piilee. Ei ehkä meille ihmisille, mutta kun tietokone lukee XML-tiedostoa, olisi hyvä idea kertoa sille, mistä tiedostossa on kyse. Tässä nimitilat ja skeemat tulevat peliin. Yksinkertaisesti sanottuna kaavioita käytetään sopivan rakenteen määrittelemiseen XML-tiedosto.
Nyt on aika puhua muutamasta yksinkertaiset säännöt Seurattava XML:

XML-sääntö #1 : Kelvollisen XML-tiedoston on vastattava tarkasti sen skeemaa. Mutta materiaalin ymmärtämisen helpottamiseksi yksikään esimerkeistäni ei käytä kaavioita. Tarkkaan ottaen mikään esimerkeistäni ei ole "riittävä". Mutta rehellisesti, en välitä. En aio rakentaa taloa, minun täytyy vain ripustaa kuva. Puhun tästä lisää myöhemmin, kun keskustelemme objektimalli XML-dokumentteja.

XML-sääntö #2 Huomautus: Jos ohjelmoit VB:llä, muista: XML on kirjainkoolla. XML on isot ja pienet kirjaimet erotteleva. XML on isot ja pienet kirjaimet erotteleva. XML on isot ja pienet kirjaimet erotteleva. Kirjoita tämä lause 1000 kertaa, etkä koskaan unohda.

XML-sääntö #3: Tunnisteita kutsutaan yleensä elementeiksi ja jokaisella avaustunnisteella on oltava vastaava päättävä tagi. Noudattamalla tätä sääntöä saat oikean XML-tiedoston. Tämä on erittäin tärkeää, koska ennen kuin XML-tiedosto on muotoiltu oikein, sitä ei jäsennetä ja ladata asiakirjaobjektimalliin. Huomaa, että jos elementti ei sisällä arvoja eikä sisällä muita (sisäkkäisiä) elementtejä, sulkeva tagi voi näyttää tältä isomman mallin sijaan . Voit nähdä tämän lähestymistavan edellisessä esimerkissä ( ).

XML-sääntö #4: Elementit voivat sisältää attribuutteja, ja attribuuttien arvot tulee laittaa lainausmerkkeihin (yksi- tai kaksinkertainen).

XML-sääntö #5: Voit käyttää määritteiden nimiä useita kertoja, mutta elementtien nimien on oltava yksilöllisiä koko tiedostossa. Edellisessä esimerkissä qty-attribuutilla oli eri merkitys riippuen siitä, missä elementissä sitä käytettiin ,, tai . Attribuutin merkitys riippuu sen käyttökontekstista. Sen sijaan elementin arvo tarkoittaa aina samaa asiaa riippumatta siitä, missä tiedostossa attribuutti sijaitsee. Edellisessä esimerkissä elementti Ja on aina sama merkitys koko asiakirjassamme. esimerkiksi käytetään aina kuvaamaan lasin korkeutta.

XML-sääntö #6: XML:ssä on useita erikoismerkkejä, joita ei voi käyttää suoraan, koska ne on varattu XML-syntaksi. Siksi käyttääksesi tällaisia ​​merkkejä, sinun on käytettävä varattua rakennetta, joka alkaa &-merkillä ja erikoiskoodilla (&-merkki on kirjoitettava muodossa &) (merkki on kirjoitettava muodossa ") (merkki< должен писаться как <) (символ >on kirjoitettava muodossa >) ja ("-symboli on kirjoitettava muodossa "). Sen sijaan voit myös käyttää ohjetta, jossa "...." voi olla mikä tahansa merkkijono paitsi "]]>". Tämä rakenne voi esiintyä missä tahansa, mutta sitä ei voi sisäkkäin.

2. XML-dokumenttiobjektimalli

XML-dokumenttiobjektimallin avulla ohjelmoijat voivat ladata XML-tiedoston sisällön muistiin. Kun XML-tiedosto on ladattu tällä tavalla, sitä voidaan käsitellä dokumenttiobjektimallin ominaisuuksien, menetelmien ja tapahtumien avulla. Tässä XML on hyödyllinen. Dokumenttiobjektimalli helpottaa suuresti XML-tiedostotietojen hakua ja käsittelyä. En puhu tässä kaikista dokumenttiobjektimallin ominaisuuksista, puhun vain joistakin tärkeimmistä ominaisuuksista, jotka auttavat saavuttamaan tämän artikkelin tavoitteen. Otan juuri luomani XML-tiedoston, joka kuvaa lasia, lataan sen Document Object Modeliin ja teen sen kanssa muutamia asioita. Tallennan loput dokumenttiobjektimallin ominaisuudet ja ominaisuudet seuraavaa artikkelia varten, jossa puhutaan asiakas-XML:stä. Huomaa, että vaikka dokumenttiobjektimalli on erittäin hyvä ja kätevä kehittäjille, se vaatii melko paljon tilaa järjestelmäresurssit. Siksi XML-tiedostojen jäsentämiseen on toinen menetelmä, joka tunnetaan nimellä SAX. Artikkelini ei väitä olevansa tyhjentävä tietolähde tästä aiheesta, joten olisi hyödyllistä käyttää myös XML SDK:ta.

Katsotaanpa esimerkkiä käyttämällä Microsoftin XML-jäsennin versiota 3.0 (msxml3.dll) ymmärtääksemme, miten se kaikki toimii. Jos sinulla ei ole analysaattoria, niin uusin versio voidaan ladata Microsoftin verkkosivuilta.
Oletetaan, että tallensin esimerkin kupin kuvauksesta XML-muodossa tiedostoon "http://web_server/xml/cup.xml" (paikallinen polku C:\inetpub\wwwroot\xml\cup.xml) ja nyt haluan lataa se dokumenttiobjektimalliin. Seuraava koodi olettaa, että analysaattori on jo ladattu ja käynnissä.

Visual Basic 6.0 -koodi:(muodosta yhteys Microsoft XML:ään, v3.0) Himmennä xmlDoc muotoon MSXML2.DOMDocument30 Aseta xmlDoc = Uusi DOMDocument30 xmlDoc.async = Väärä xmlDoc.validateOnParse = Väärä xmlDoc.load ("c:\inetpub\wwwcrootxml" ) msgBox xmlDoc.xml ASP-palvelinpuolen koodi Visual Basicissa: Dim xmlDoc Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0") xmlDoc.async = Väärä xmlDoc.validateOnParse = Väärä xmlDoc.load "/xml/cup.xml" ASP-palvelinpuolen koodi Java-skriptissä: var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false; xmlDoc.validateOnParse = false; xmlDoc.load("/xml/cup.xml");

Selitys yllä olevasta koodista - käydään läpi VB6-koodi

Rivi 1: Himmennä xmlDoc muodossa MSXML2.DOMDocument30

Tällä ensimmäisellä rivillä määrittelemme viittauksen "Microsoft XML, v3.0". Tällä rivillä määritin xmlDoc-muuttujan viittaukseksi XML-dokumenttiin. MSXML2 on kirjasto (käytä tätä nimeä, älä yritä kirjoittaa MSXML3:a, se ei toimi). DOMDocument30 määrittelee objektin XML-dokumentti joka vastaa versiota 3.0. Saatat myös nähdä seuraavanlaisen koodin: dim xmlDoc muodossa MSXML2.DOMDocument. Tätä rakennetta käytetään yleensä, kun et halua määrittää tiettyä versiota XML-dokumentista. Tässä tapauksessa käytetään järjestelmään rekisteröityä oletusanalysaattoria. Ainoa ongelma saattaa olla, että oletusarvoisesti rekisteröidyn analysaattorin versio voi vaihdella erilaisia ​​tietokoneita. Jos haluat olla varma, että kirjoittamasi koodi toimii minkä tahansa analysaattoriversion kanssa, älä käytä rakenteita, jotka ovat ominaisia ​​analysaattorin tietyille versioille. Koska ei ole takeita siitä, että koodiasi käyttävällä käyttäjällä on asennettuna sama versio analysaattorista, jota varten kirjoitit koodisi. Toinen jäsennysversiosta riippumattoman koodin kehittämisen etu on, että kun enemmän uusi versio analysaattori, hänellä on varmasti taaksepäin yhteensopivuus Kanssa aiemmat versiot ja sinun ei tarvitse kääntää koodiasi uudelleen.

Linja 2: Aseta xmlDoc = uusi DOMDocument30

Tämä rivi alustaa xmlDoc-muuttujan version 3.0 XML-dokumenttiobjektin uutena esiintymänä.

Rivi 3: xmlDoc.async = Väärin

XML-tiedostoja voidaan ladata joko synkronisesti tai asynkronisesti. Jos xmlDoc.async = False, se tarkoittaa, että XML-tiedoston sisältö ladataan ja vasta sen jälkeen ohjaus siirretään kutsuprosessille. Jos xmlDoc.async = True, se tarkoittaa, että ohjaus siirretään kutsuprosessille välittömästi odottamatta, kunnes XML-tiedoston sisältö on ladattu kokonaan.

Rivi 4: xmlDoc.validateOnParse = Väärin

Tämä koodi osoittaa, että jäsentimen ei pitäisi vahvistaa ladattavaa XML-tiedostoa sen skeemaa vastaan ​​(validateOnParse = False). Jotta skeeman yhteensopivuuden tarkistus voidaan ottaa käyttöön, sinun on kirjoitettava validateOnParse = True.

Rivi 5: xmlDoc.load("C:\inetpub\wwwroot\xml\cup.xml")

Tämä rivi kutsuu menetelmää määritetyn XML-tiedoston lataamiseksi. Latausmenetelmiä on kahdenlaisia. Ensimmäinen, joka on kirjoitettu riville 5, lataa tiedoston dokumenttiobjektimalliin, ja XML-tiedostoon on välitettävä koko polku. Toinen latausvaihtoehto sisältää xml-merkkijonon välittämisen parametrina. Tämän tyyppistä latausta voitaisiin kutsua esimerkiksi seuraavasti: xmlDoc.loadXML("valid xml string"). Näytän sinulle, kuinka tätä menetelmää käytetään myöhemmin.

Rivi 6: MsgBox xmlDoc.xml

Tällä rivillä näkyy ladatun XML-tiedoston sisältö. Tämän seurauksena meidän pitäisi saada alkuperäinen XML-tiedosto, jonka loimme aiemmin.

2.2. XML-dokumenttiobjektimallin tutkiminen

Luo uusi projekti Visual Basicissa ja anna sille nimi standard.exe. Liitä yllä oleva koodi projektisi pääikkunan lataustapaan. Varmista, että mainitset viittauksen "Microsoft XML v3.0". Voit tehdä tämän napsauttamalla Project-->References, vieritä sitten näkyviin tulevaa luetteloa alaspäin ja etsi siitä haluamasi linkki. Huomaa, että analysaattorin versio 3.0 on oltava asennettuna tietokoneellesi, muuten sitä ei näytetä luettelossa. Aseta keskeytyskohdat koodin viimeiselle riville (msgbox xmlDoc.xml). Suorita sovellus virheenkorjaustilassa. Kun suoritusprosessi saavuttaa pysähtymispisteen, kutsu "Locals"-ikkuna ja katso dokumenttiobjektimallia. Voit oppia paljon katsomalla, mitä tässä ikkunassa näytetään. "Paikalliset"-ikkunan pitäisi näyttää samanlaiselta kuin alla oleva kuva. Tässä on joitain dokumenttiobjektimallin mielenkiintoisia ominaisuuksia.

XML-dokumenttiobjektimalli sisältää aina kaksi ylätason solmua:

  • Item1 on asiakirjaelementtien haaran juuri (ohita se)
  • Item2 on itse asiassa asiakirjan ensimmäinen elementti (muista tämä)

nodeName tai baseName - voidaan käyttää haettaessa elementin tai attribuutin nimeä.
nodeType - käytä saadaksesi nykyisen solmun tyypin.
nodeValue - käytetään solmutietojen arvon selvittämiseen.
childNodes on kokoelma lapsisolmuja. Ne voivat olla elementtisolmuja, tekstisolmuja ja CDATA-solmuja. Saattaa olla muun tyyppisiä solmuja, joista en nyt puhu, mutta voit oppia niistä kaiken XML SDK:ssa.
attribuutit on kokoelma nykyisen elementin attribuuttisolmuja.
pituus - käytetään määrittämään puun solmujen lukumäärä, jotka kuuluvat suoraan nykyiseen.
xml - tämä ominaisuus on kaikissa solmuissa ja sitä voidaan käyttää esittämiseen nykyinen sijainti asiakirjassa. XML-merkkijono alkaa nykyisestä solmusta ja menee alas puun loppuun. Tämä on erittäin hyödyllinen ominaisuus. Kokeile sitä ja katso mitä tapahtuu.

2.2.2. Elementtisolmut

Elementtisolmu voi sisältää elementtien, attribuuttien, tekstin tai CDATA:n lapsisolmuja. Alla olevasta kuvasta näet seuraavat tiedot "SOLID"-solmusta:

nodeType - Nykyinen solmun tyyppi = NODE_ELEMENT - ts. nykyinen solmu on elementti.
nodeName tai baseName tai tagName - Nykyisen solmun (elementin) nimi = SOLID.
Sen pääelementillä CONTENTS on 4 lasta.
Tämä näkyy seuraavassa kuvassa, mutta SOLIDilla on yksi lapsi, jolla on tekstin tyyppi tiedot.
text - "ice cube" on pikakuvakemenetelmä, jonka avulla voit saada nykyisen solmun arvon siirtymättä alitekstisolmuun.

2.2.3. Attribuuttisolmut

Attribuuttisolmut voivat koostua vain teksti- tai CDATA-alasolmuista. Seuraava kuva näyttää, mitä tietoja voidaan saada solmusta "määrä":

nodeType - Nykyisen solmun tyyppi = NODE_ATTRIBUTE - nykyinen solmu on attribuutti.
nodeName tai baseName - Nykyisen solmun nimi (Attribuutit) = määrä

Seuraavasta kuvasta käy myös selväksi, että qty:llä on yksi lapsi, jolla on tekstitietotyyppi.
teksti tai arvo - "2" on pikakuvakemenetelmä, jonka avulla voit saada nykyisen solmun arvon siirtymättä alitekstisolmuun.

2.2.4. Teksti- ja CDATA-solmut

Teksti- tai CDATA-solmuilla ei ole lapsia. Tekstisolmut sisältävät pääsolmunsa käsitellyt tekstitiedot. CDATA sisältää pääsolmunsa raakatekstidatan. CDATA-solmut luodaan, kun XML-tiedoston tiedot kehystetään erityisellä tavalla. CDATA-tarra kertoo jäsentäjälle, ettei se jäsentä tietoja ja hyväksyy tarran sisällä olevat merkit datana. CDATA-osio on erityisen hyödyllinen, kun sinun täytyy lisätä koodia XML-tiedoston sisään. Seuraava kuva näyttää, mitä tietoja nykyisestä tekstisolmusta voidaan saada:

nodeType - Nykyisen solmun tyyppi = NODE_TEXT - nykyinen solmu sisältää tekstidataa.
solmunNimi - Nykyisen solmun nimi (teksti) = #teksti - kaikkia tekstisolmuja kutsutaan nimellä #teksti
data tai teksti tai arvo - "2" on nykyinen solmutieto.

2.2.5. Virheet asiakirjaa ladattaessa

Asiakirjaobjektimallin parseError-osa voi olla hyödyllinen XML-asiakirjan lataamisen yhteydessä ilmenevien ongelmien tunnistamisessa. Jos poistan sulkevan tagin esimerkkitiedostossamme olevasta OTHER-kohdasta ja yritän suorittaa ohjelman uudelleen, saan seuraavan tuloksen. Ensimmäinen osa hyödyllistä tietoa, on se, että seuraava sisarus sisältää nyt arvon Ei mitään. Jos nyt katsot lapsisolmuja, näet, että pituuskenttä on nyt 0. Molemmat merkit osoittavat, että XML-dokumenttiamme ei ladattu. Selvittääkseni syyn avaa parseError-solmun ja saan kaikki virhetiedot.

Joten olen näyttänyt sinulle, kuinka XML-tiedosto ladataan Document Object Modeliin, mutta mitä teet sillä siellä? Yksi tärkeimmistä ominaisuuksista, joita voit käyttää, on suorittaa erilaisia ​​kyselyitä XML-dokumentille. Tätä varten voit tietysti selata koko asiakirjaa, kunnes löydät etsimäsi tiedot. Mutta edullisin tapa on käyttää toista DOMDocument-luokan kahdesta menetelmästä. Edellisessä esimerkissämme käytetyt kaksi solmujen löytämiseen käytettyä menetelmää voivat näyttää muotoilta xmlDoc.SelectSingleNode(patternString), jotta saadaan etsimämme solmu, tai xmlDoc.SelectNodes(patternString) saadaksesi luettelon etsimistämme solmuista. Parametri patternString on juuri pyyntö. Se voidaan muodostaa kahdella tavalla. Joko XSL-pyynnönä tai XPath-pyynnönä. Uudempi ja suosituin tapa hakea XML-dokumenttia on XPath. Mallimerkkijonon muoto on asetettava etukäteen ennen ensimmäistä kutsua jommallekummalle datapyyntömenetelmälle, muuten pyyntöjen muodostamiseen käytetään oletusarvoisesti XSL-menetelmää. Aseta kuviomerkkijonon muodostustyyppi käyttämällä setProperty("SelectionLanguage", "format"). Jos haluat muuttaa esimerkissämme kyselyitä käyttämään XPath-tapaa, lisään seuraavan komennon: setProperty("SelectionLanguage","XPath"). Mielestäni XPath on eniten tärkeä tekniikka XML-muodossa, jota tulisi tutkia. Annan sinulle yksinkertaisia ​​XPath-kyselyitä. Hyvä paikka aloittaa tämän tekniikan oppiminen on Microsoft XML SDK. Toinen tapa selittää tämä olisi kirjoittaa yksinkertainen sovellus Visual Basicissa, jonka avulla voit kirjoittaa kyselyitä ja näyttää tuloksen. Saatat löytää joitain ilmaisia ​​sovelluksia, jotka tekevät saman asian, mutta XPath on melko uusi, eivätkä nämä sovellukset välttämättä tue sitä täysin.

2.3.1. Käytä XPATHia suorittaa kyselyitä asiakirjaobjektimallia vastaan

Lisätään koodi edellisen esimerkkimme loppuun tilauskirjamme sisällön palauttamiseksi:

LOISTAVA! Lisätään nyt toinen kysely, jonka avulla voimme määrittää, onko lasissa kansi vai ei. Lisää seuraava koodi edellisen loppuun:

Aseta objNode = xmlDoc.selectSingleNode("/CUP/LID") if objNode.text="yes" then MsgBox "Meillä on kansi" else MsgBox "Tässä kupissa ei kantta" päättyy jos

Käydään koodi läpi rivi riviltä:

Rivi 1: Dim objNode Kuten IXMLDOMNode

Tämä rivi määrittää XML-dokumenttisolmutyypin objNode-muuttujan. On tärkeää ymmärtää, että XML-dokumenttisolmu on myös objekti. Ei sillä ole väliä. Se koostuu itsestään sekä sen määritteistä ja lapsista (childNodes). Näin voit leikata pois tarpeettomat oksat valitsemalla vain tarvitsemasi.

Linja 2: Himmeä objListOfNodes IXMLDOMNodeList-muodossa

Tämä rivi määrittää muuttujan objListOfNodes, jolla on listatyyppi XML-solmut asiakirja (solmuryhmä).

Rivi 3: xmlDoc.setProperty "SelectionLanguage", "XPath"

Tämä rivi määrittää, kuinka kuviomerkkijono muodostetaan XPathiksi.

Rivi 4: MsgBox "Kuppisi sisältää seuraavat esineet:"

Rivi 5: Aseta objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]")

Tämä rivi suorittaa XPath-kyselyn, joka palauttaa ryhmän solmuja ja tallentaa ne objListOfNodes-muuttujaan. Pyyntö on jaettu seuraaviin osiin:

  • //CONTENTS - ota kaikki CONTENTS-elementit XML-dokumentista. Huomautus: // on lyhenne XML-dokumentin koko sisällölle.
  • /* - SISÄLTÖ-elementtien luettelosta otetaan kaikki (* - käytetään osoittamaan kaikki) jälkeläiset elementit. Tämä pienentää tuloksen neljään elementtisolmuun ( ). Nämä neljä solmua kuuluvat suoraan CONTENTS-solmun alle.
  • [@qty>0] - tarkista jokainen alielementti varmistaaksesi, että sen qty-attribuutti (@ - tarkoittaa attribuuttia) on suurempi kuin 0. Jos tämä ehto ei täyty, solmu hylätään. Kaikki XPath-pyynnön sisällä voi saada arvot True tai False. Jos tulos on tosi, solmu tallennetaan. Jos tulos on epätosi, solmu hylätään. Tämän jälkeen tuloksemme pienennetään kolmeen solmuun (

Rivi 6-8: Jokaiselle objSolmulle In objListOfNodes / MsgBox objNode.Text / Next

Nämä rivit näyttävät kunkin kyselyä vastaavan elementtisolmun arvot. ("jääpala" , "olki", "vesi").

Rivi 9: Aseta objNode = xmlDoc.selectSingleNode("/CUP/LID")

Tämä rivi palauttaa kaikki LID-elementit, jotka kuuluvat CUP-elementtiin, joka puolestaan ​​on johdettu puun juuresta (kun kysely alkaa /, tämä tarkoittaa, että sinun on aloitettava juuresta). Tämä on hyvin samanlainen kuin tiedoston tai kansion polku. Esimerkissämme tämä kysely palauttaa LID-elementin, joka sisältää arvon "yes". Tärkeintä tässä on, että kerroin pyynnön aloittaa XML-dokumentin juurielementistä. Kyselyt eivät aina ala juurielementeistä, ne alkavat yleensä nykyisestä solmusta. Esimerkissämme tällä ei ole väliä, koska nykyinen solmu (xmlDoc) on XML-dokumentin juurielementti (mutta tämä ei pidä paikkaansa kaikissa tapauksissa).

Rivit 10-15: if objNode.text="yes" then / MsgBox "Meillä on kansi" /
else / MsgBox "Ei kansi tässä kupissa" /end if

Tällä rivillä näkyy viesti "Meillä on kansi", koska elementin LID-tekstiominaisuus on "kyllä".

3. Muunna ADO XML-muotoon

Nyt kun ymmärrät XML:n perusteet, luodaan ActiveX-komponentti, joka muuntaa ADO-tietojoukon XML-muotoon. Tarkoituksena on saada kirjojen nimet Pubs-tietokannan Titles-taulukosta ja palauttaa ne XML-muodossa. Käytän tulosta seuraavassa artikkelissani. Voit sanoa, että ADO:lla on omat menetelmänsä tallentaa tuloksen XML-muodossa, eikö? Kyllä, mutta jos luotan ADOon tämän tekemiseen, saan XML-tiedoston niin kauheassa muodossa, että sen kanssa on mahdotonta työskennellä. ADO luo XML-tiedoston nimiavaruuden avulla, enkä tarvitse sitä juuri nyt. Toiseksi ADO luo XML-tiedoston, joka esitetään attribuuttien muodossa. Toisin sanoen jokaisesta tietueesta tulee elementti ja jokaisesta kentästä attribuutti:

Mutta haluaisin saada XML-tiedoston elementtien muodossa, jossa jokainen merkintä sisältyisi tunnisteeseen , ja jokainen kenttä olisi elementti tunnisteen sisällä . XML-merkkijonosyntaksini olisi:

tiedot taulukosta tiedot taulukosta tiedot taulukosta tiedot taulukosta tiedot taulukosta tiedot taulukosta tiedot taulukosta

Muuten, tein juuri skeeman XML-merkkijonolleni. Jos minun on nyt tarkistettava XML-dokumentin rakenne skeemaa vasten, minun tarvitsee vain muuntaa skeema oikeaan muotoon. Eli DTD- tai XDR-syntaksissa. Huomaa, että olen lisännyt joitain attribuutteja jokaiseen elementtiin . Yksi syy tähän on se, että asiakas voi käyttää näitä tietoja. Prettyname voidaan käyttää tietotunnisteena. Datatype-attribuuttia voidaan käyttää asiakaspuolen tietojen validointiin. Mutta ollakseni rehellinen, todellinen syy näiden määritteiden olemassaoloon on se, että niillä on erityinen tarkoitus XSL-tiedostomallissa, jota käytän usein SQL-kyselyiden where-lauseen rakentamiseen. Ehkä julkaisen tämän lähestymistavan esittelevän artikkelin pian. Malli on itse asiassa erittäin hyödyllinen. Kun XML-rakennetta käytetään Otsikkotaulukon tietoihin, tulos näyttää tältä:

Varatun johtajan tietokantaopas BU1032 Varatun johtajan tietokantaopas liiketoimintaa 19.99 4095 Yleiskatsaus käytettävissä oleviin tietokantajärjestelmiin painottaen yleisiä liiketoimintasovelluksia. Kuvitettu. 6/12/1991 Ruoanlaitto tietokoneella: piilotaseet BU1111 Ruoanlaitto tietokoneella: piilotaseet liiketoimintaa 11.95 3876 Hyödyllisiä vinkkejä sähköisten resurssien parhaaseen käyttöön. 6/9/1991

Nyt minulla on jotain tekemistä!

Listaus 1 - CUP.XML

lasi 6 16 jääkuutio olki vettä Joo

Himmennä xmlDoc muodossa MSXML2.DOMDocument30 Aseta xmlDoc = Uusi DOMDocument30 xmlDoc.async = Väärä xmlDoc.validateOnParse = Väärä xmlDoc.Load ("c:\inetpub\wwwroot\xml\cup.xml") DimDoc.deml jListOfNodes Kuten IXMLDOMNodeList xmlDoc.setProperty "SelectionLanguage", "XPath" MsgBox "Kuppisi sisältää seuraavat kohteet" Set objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]") Jokaiselle objNode In objNo MsgOfNo objNo MsgOfNodes Teksti Seuraava Aseta objNode = xmlDoc.selectSingleNode("/CUP/LID") Jos objNode.Text = "yes" Sitten MsgBox "Meillä on kansi" Else MsgBox "Tässä kupissa ei kantta" Lopeta jos

Luettelo 3 – ActiveX-ohjain: ADO XML-muodossa (WebClass.dll)(xmlControl.cls)

Vaihtoehto Explicit "Ilmoita tietokantamuuttujat yksityisenä m_dbConnection uutena ADODB.Connection Yksityinen m_dbCommand nimellä ADODB.Command Yksityinen m_adoRs nimellä ADODB.Recordset Yksityinen m_adoErrors nimellä ADODB.Errors Yksityinen m_adoConnection Julkinen m_adoConnection ErrorTimen ut Varianttina Julkinen strConnect Varianttina Julkinen strAppName As Merkkijono Julkinen strLogPath merkkijonona Julkinen strDatabase merkkijonona Julkinen strUser merkkijonona Julkinen strServer merkkijonona Julkinen strVersio merkkijonona Julkinen lMSADO Boolen muodossa "Private Global Variables Yksityinen gnErrNum Variantti Yksityinen gstrErrSstrvates vate gstrADOError As String Private Const adLeonNoRecordset As Integer = 129 Yksityinen gtableName(6) As String Private gcolumnName(6) As String Private gprettyName(6) As String Private gdatatype(6) As String Yksityinen gfilter(6) Functions OpenDatatab(6) As Jos Len(strConnect) = 0 Sitten "aseta oletusarvot If Len(strDatabase) = 0 Then strDatabase = "pubit" End If If nConnectionTimeOut = 0 Then nConnectionTimeOut = 600 End If If nCommandTimeOut = 0 Sitten nCommandTimeOut Jos = 6 Len (strAppName) = 0 Then strAppName = "xmlControl" End If If Len(strUser) = 0 Then strUser = "sa" End If If Len(strPassword) = 0 Then strPassword = "" End If strConnect = "Provider=SQLOLEDB. 1; " & _ "Sovelluksen nimi=" & strAppName & _ "; Tietolähde=" & strServer & "; Alkuperäinen katalogi="&strDatabase&"; " & _ " Käyttäjätunnus=" & strKäyttäjä & "; Salasana=" & strPassword & ";" Lopeta, jos "yhteys SQL Server ja avaa tietokanta On Error GoTo SQLErr "Käynnistä virheenkäsittelijä With m_dbConnection .ConnectionTimeout = nConnectionTimeOut .CommandTimeout = nCommandTimeOut .Open strConnect "avaa tietokanta käyttämällä yhteysmerkkijonoa End With On Error GoTo 0 "TruDaase error handle = "tietokanta on auki onnistuneesti Lopeta funktio SQLErr: Call logerror("OPEN") OpenDatabase = Väärä päätefunktio Yksityinen funktio BuildSQLwhere(tmpWhere) As String whereClause As String Dim strSQL As String Call OpenDatabase "avaa tietokantapubit If IsMissing(xmlWhere) Sitten "kun kysely epäonnistuu whereClause = "" Else whereClause = BuildSQLwhere(xmlWhere)" muuntaa kyselyn oikeaksi sql End Jos "alustaa sql lauseke, joka kyselee kirjojen otsikot strSQL = "valitse otsikkotunnus, nimi, tyyppi, hinta, ytd_myynti, huomautukset, julkaisu otsikoista " & whereClause Call NewRecordSet "luo tietojoukko "aseta kohdistimen sijainti m_adoRs.CursorLocation = adUseClient "avaa tietuejoukko m_adoRs .Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText "katkaise yhteys tietojoukkoon Set m_adoRs.ActiveConnection = Nothing On Error GoTo 0 "sammuta virheenkäsittelijä "sulje tietokanta ja vapauta yhteys Call m_OFThenDatabitlesE =CloseaDatabITles. "" "pyyntö ei palauttanut arvoja Else If lMSADO Then GetTitlesXML = msado( m_adoRs) "muuntaa ado-tietuejoukko mukautettuun xml-muotoon End If End If "sulje tietojoukko Kutsu CloseRecordset Exit Function SQLErr: Call logerror(strSQL) End Funktio Yksityinen funktio ADOtoXML(tmprs ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields Kuten ADODB.Fields "julistaa kokoelman kenttien tallentamiseen Dim adoField As ADODB.Field" käytetään kunkin kentän hakemiseen kokoelmasta A Dim Doc. msxml2.DOMDocument30 Dim tmpLine As String "tallentaa xml-esityksen jokaisesta kirjasta Dim tmpXML As String "palvelee xml-merkkijonojen ketjuttamista Dim i As Integer If tmprs.EOF Sitten "pyyntö ei palauttanut tietueita ADOtoXML = Else" Aseta adoFields = tmprs.Fields "luo kokoelmakentät End If tmpXML = " " "Kaikki kirjat suljetaan tunnisteella Do Until tmprs.EOF "silmukan jokaisen rivin läpi tietojoukossa i = 0 " I on ado-kentän indeksi, joka alkaa nollasta - ensimmäinen kenttä on field(0) tmpLine = " " & tmprs("title") & vbCrLf Jokaiselle adoField In adoFields "silmuka kaikkien kenttien läpi "build xml tag ja sen attribuutit nykyiselle kentälle tmpLine = tmpLine & " " & adoField.Value tmpLine = tmpLine & "" & vbCrLf i = i + 1 "siirry seuraavaan kenttään Seuraava tmpXML = tmpXML & tmpLine & "" & vbCrLf "sulkeva tagi viimeisen kentän jälkeen tmprs.MoveNext "seuraava otsikko Loop Set adoField = Ei mitään "tuhoa kenttäobjekti Set adoFields = Ei mitään "tuhoa kenttäkokoelmaobjekti tmpXML= tmpXML & ""&vbCrLf" sulkeva tagi Set xmlDoc = Uusi msxml2.DOMDocument30 "create xmlDOM xmlDoc.async = False "odota asiakirjan latautumista xmlDoc.validateOnParse = Väärin "älä tarkista skeemaa xmlDoc.loadXML(tmpXML) "lataa merkkijono dokumenttiobjektimalliin Päällä Virhe Jatka Seuraavaksi "jos tiedostoa ei ole, käsittele tämä virhe Kill("c:\temp\custom.xml") "poista tiedosto, jos se on olemassa On Error GoTo 0 "käske virheenkäsittelijä katkaista, kun virhe havaitaan xmlDoc .save ("c:\ temp\custom.xml") "tallenna xml tiedostoon ADOtoXML=xmlDoc.xml "palauttaa xml-merkkijonon Set xmlDoc=Ei mitään "tuhoa dokumenttiobjektimalli Lopetustoiminto Yksityinen funktio msado(tmprs nimellä ADODB.Recordset) As String Dim xmlDoc Kuten msxml2.DOMDocument30 Virheessä Jatka seuraavaksi "jos tiedostoa ei ole olemassa, saamme virheilmoituksen Tapa ("c:\temp\msado.xml") "poista tiedosto, jos se on olemassa Virheessä GoTo 0 "kerro virheenkäsittelijä keskeyttää, kun virhe havaitaan tmprs.save "c: \temp\msado.xml", adPersistXML "tallenna xml tiedostoon Set xmlDoc = Uusi msxml2.DOMDocument30 "luo objektimalli xml-asiakirjoista xmlDoc.async = False "odota xml-dokumentin latautumista xmlDoc.validateOnParse = Väärin "älä tarkista xmlDoc.Load-skeemaa ("C:\temp\msado.xml") "lataa tiedosto dokumenttiobjektimalliin msado = xmlDoc.xml "return xml-merkkijono Set xmlDoc = Ei mitään "tuhoa dokumenttiobjektimalli Lopeta toiminto Private SubCloseRecordset() "sulje tietojoukko m_adoRs.Close Set m_adoRs =Ei mitään End Sub Private Sub NewRecordSet() Set m_adoRs= Ei mitään Aseta m_DODBRecord.=Uusi Lopeta A SubPrivate Sub CloseDatabase() m_dbConnection.Close Set m_dbConnection =Ei mitään Lopeta Sub Yksityinen Sub logerror(errSQL As String) Himmeä hFile Kokonaislukuna Dim exprFile Merkkijonona Virheessä GoTo 0 gnErrNum = Err.Drcesc = Errr.Drcesc = ErstrErstrEr Aseta m_adoErrors = m_dbConnection.Errors jokaiselle m_adoErr In m_adoErrors gstrADOError = m_adoErr.Description & "," & CStr(m_adoErr.NativeError) _ & "," & CStr(m_adoErr.Number) & "," &r.Number_ m_adoErr.Number ," & CStr(m_adoErr.SQLState) Seuraava hFile =FreeFile If Len(strLogPath) = 0 Sitten strLogPath = "C:\ temp\" End If expFile = strLogPath & strAppName & ".err" Avaa expFile liittämistä varten #hFile Tulosta #hFile,"*********************** ***********" Tulosta #hTiedosto, Nyt() Tulosta#hTiedosto, "************************ ********" Tulosta #hFile,"Aliohjelma: " & tmpPro Print #hFile, " Virhenumero:" & gnErrNum Print#hFile, "Virheen kuvaus: " & gstrErrDesc Tulosta #hFile, "Virhelähde:" & gstrErrSrc Tulosta #hFile, "Ado error String: " & gstrADOError Print #hFile, "Virheellinen SQL:" & errSQL Sulje #hFile End Sub Yksityinen Sub Class_Initialize() strVersion = "xmlControl Version 1.1" "title_id,title,type,price ,ytd_sales,notes,pubdate gtableName(0) = "titles" gcolumnName(0) ="gtiprettyle_me 0) = "Nimikkeen tunnusnumero" gdatatype(0) = "numero" gfilter(0) = "" gtableName(1 ) = "nimikkeet" gcolumnName(1) = "nimi" gprettyName(1) = "Kirjan nimi" gdatatype(1) = "teksti" gfilter(1) = "" gtableName(2) = "otsikot" gcolumnName(2 ) = "type" gprettyName(2) = "Kirjan tyyppi" gdatatype(2) = "teksti" gfilter (2) = "" gtableName(3) = "nimikkeet" gcolumnName(3) = "hinta" gprettyName(3) = "Kirjan hinta" gdatatype(3) = "numero" gfilter(3) = "" gtableName( 4) = "titles" gcolumnName(4) = "ytd_sales" gprettyName(4) = "Vuodesta tähän päivään mennessä tapahtunut myynti" gdatatype (4) = "numero" gfilter(4) = "" gtableName(5) = "nimikkeet" gsarakkeenNimi( 5) = "muistiinpanoja" gprettyName(5) = "Huomautuksia kirjasta" gdatatype(5) = "muistio" gfilter (5) = "" gtableName(6) = "otsikot" gcolumnName(6) = "julkaisupäivä" gprettyName( 6) = "Julkaisupäivä" gdatatype(6) = "päivämäärä" gfilter(6) = "" Loppuosa

Listaus 4 - VB-testisovellus WebClassin testaamiseen

Yksityinen alakomento1_Click() Dim objWC As xmlControl Dim xml As String Set objWC = Uusi xmlControl objWC.strDatabase = "pubit" objWC.strServer = "ltweb" objWC.strUser = "sa" objWC.strPas objWC.strPas objWC.strPas .Value objWC.strAppName = "Artikkeli1" Teksti1.Teksti = objWC.getTitlesXML End Sub

Listaus 5 - ASP WebClassin testaamiseen


Olen työskennellyt XML-tiedostojen kanssa pitkään, mutta vasta nyt kysyin itseltäni: Miten säännöllisin keinoin luoda ja muokata XML-tiedostoja MS Excelissä? Excel on kätevä ja intuitiivinen työkalu erilaisten tietojen luomiseen, muokkaamiseen ja käsittelyyn. Exceliä opiskellaan koulussa, ja luultavasti ei ole henkilöä, joka osaa työskennellä tietokoneella ja ei tiedä Excelissä työskentelyn perusteita. Siksi tämä on mielestäni sopivin työkalu, jota voidaan suositella tavallisille käyttäjille datatiedostojen luomiseen ja muokkaamiseen erilaisia ​​sovelluksia, mukaan lukien verkkosovellukset. Minulla on kotona asennettuna MS Excel 2013 ja sen esimerkin avulla kuvailen yksinkertaisia ​​toimenpiteitä, jotka on suoritettava luotaessa XML-datatiedostoa Excelissä. Luulen, että aiemmin Excel-versiot tämäkin onnistuu. Luodaaksesi XML-datatiedosto, tehdään muutama yksinkertainen vaihe. Katsotaanpa niitä esimerkkinä tapahtumadatatiedoston luomisesta.

1. Ensin sinun on luotava ja täytettävä tietotaulukko Excelissä tietorakenteen mukaisesti. Käytä tähän valikkokohtaa Lisää/taulukko.

2. Luodaan XML-tiedostoskeema. Voit tehdä tämän kirjoittamalla tekstieditoriin seuraavat rivit ja tallenna ne tiedostoon.

XHTML

0 0 0 0 Kristuksen kirkas ylösnousemus. pääsiäinen 0 0 -7 0 -7 Herran tulo Jerusalemiin 1

0

0

0

0

Kristuksen kirkas ylösnousemus. pääsiäinen

0

0

-7

0

-7

Herran tulo Jerusalemiin

1

3. Avaa nyt välilehti Kehittäjä, painaa nappia Lähde ja määritä XML-lähdetiedosto. Ota tarvittaessa valikkokohta käyttöön Kehittäjä Excelin asetuksissa.

4. Jäljelle jää kaavion elementtien ja taulukon sarakkeiden vertailu vetämällä elementit vastaaviin sarakeotsikoihin.

5. Ja viimeinen vaihe on viedä taulukon tiedot XML-tiedostoon käyttämällä kontekstivalikko. Seiso minkä tahansa taulukon solun päällä, napsauta hiiren kakkospainikkeella ja valitse XML/Vie… ja tallenna XML-tiedosto halutulla nimellä.

Tallenna Excel-tiedosto myöhempää muokkaamista ja lisäystä varten. Tämän jälkeen kohdat 1.-4. tätä ei tarvitse tehdä!

P.S. Miksi kirjoitin tämän banaalin huomautuksen? Ensinnäkin, jotta et unohda, ja toiseksi uskon, että nämä tiedot ovat hyödyllisiä käyttäjille alkaen seuraava versio 0.6 ;-)