Uvod
Kao što ćemo vidjeti program koji se zove XML parser
se može upotrijebiti za učitavanje XML dokumenta u memoriju našeg
računala. Kada je dokument učitan njegove informacije se mogu dohvatiti,
mijenjati pomoću DOM-a.
Struktura XML dokumenta se također logički reprezentira kao stablo,
documentElement predstavlja sam vrh takvog
stabla. Taj elemenat ima jedan ili više čvorova potomaka koji čine jednu mrežu
čvorova.
Node Interface Model se upotrebljava za pristup individualnim
elementima u stablu. Kao primjer metoda childNodes od
documentElement objekta se može pozivati sa for/each petljom za pristup
sekvencijalno svim čvorovima određenog roditeljskog čvora. Microsoft XML parser
podržava najpotrebnije funkcije za navigaciju kroz stablo, pristup elementima i
njegovim atributima, umetanje i brisanje čvorova i konvertiranje čvorova natrag
u XML dokument
The Microsoft XML Parser
Da bi učitali - kreirali ili manipulirali - XML document trebamo XML parser
Microsoft XMLDOM struktura i razvoj prati te podržava programske modele:
- JavaScript-a, VBScript, Perl, VB, Java, C++ itd.
- W3C XML 1.0 i XML DOM
- DTD i validaciju
Ako upotrebljavamo JacaScript u IE 5.0, možemo kreirati objekt XML
dokument-a na slijedeći način:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
|
a ako pak upotrebljavamo VBScript:
set xmlDoc = CreateObject("Microsoft.XMLDOM")
|
te VBScript u Active Server Page (ASP),
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
|
Učitavanje XML dokumenta u parser
<?xml
version="1.0" ?>
<note time="12:03:46">
<heading>Podsjetnik</heading>
<body>Nemoj
zaboraviti ono za sutra !</body>
</note>
|
Slijedeći kod učitava postojeći XML dokument (poruka.xml) u XML parser
<script type="text/javascript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("poruka.xml")
// ....... tu dolazi obrada dokumenta
</script>
|
Prva linija skripte kreira instancu Microsoft XML parsera. Treća linija
pomoću parsera učitava XML dokument, a druga zaustavlja izvršenje parsera tako
dugo je dokument nije dokraja učitan.
Možemo učitati tekst koji predstavlja XML source, ali sa metodom loadXML za
rezliku od metode load koju smo upotrijebili u prijašnjem primjeru:
<script type="text/javascript">
var text="<note>"
text=text+"<to>Mirko</to><from>Pero</from>"
text=text+"<heading>Podsjetnik</heading>"
text=text+"<body>Nemoj zaboraviti ono za sutra!</body>"
text=text+"</note>"
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.loadXML(text)
// ....... tu ide daljnja obrada
</script>
|
Pristup XML elementima preko imena
Ovaj programski odsječak u JavaScript-u čita XML podatke iz XML dokumenta i
upisuje ih u varijable(innerText) pomoću kojih ih kasnije možemo prikazati
u obliku HTML dokumenta:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("poruka.xml")
to.innerText=
xmlDoc.getElementsByTagName("to").item(0).text
from.innerText=
xmlDoc.getElementsByTagName("from").item(0).text
header.innerText=
xmlDoc.getElementsByTagName("heading").item(0).text
body.innerText=
xmlDoc.getElementsByTagName("body").item(0).text
|
napomena: treba
primijetiti da je tekstualni čvor je potomak <from> čvora pa se do vrijednosti
teksta(string) dolazi ovako:
getElementsByTagName("from").item(0).text, ane kao:
getELementsByTagName("from").text
još
nekoliko primjera upotrebe DOM-a:
name metoda
<html>
<body>
<script type="text/vbscript">
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("poruka.xml")
for each x in xmlDoc.documentElement.attributes
document.write(x.name)
next
</script>
</body>
</html> |
izlaz
createCDATASection metoda
<html>
<body>
<script type="text/vbscript">
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
set noviNode=xmldoc.createCDATASection("Ovo je CDATASection
čvor")
xmldoc.documentElement.appendchild(newnode)
document.write("<xmp>" & xmlDoc.xml & "</xmp>")
</script>
</body>
</html> |
izlaz,
<?xml
version="1.0"?> <note
time="12:03:46">
<to>Mirko</to>
<from>Pero</from>
<heading>Podsjetnik</heading>
<body>Nemoj zaboraviti ono za
sutra!</body>
<![CDATA[Ovo je CDATASection
čvor]]>
</note>
|