Ho un file XML di questo genere:
<!DOCTYPE documento [ <!ELEMENT documento (capitolo)> <!ELEMENT capitolo (#PCDATA)> ]> <documento> <capitolo> "ciao merdaccia" </capitolo> </documento>E con il codice javaScript:
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.load("prova.xml"); var root = xmlDoc.documentElement; alert(root.getElementsByTagName("capitolo")[0].text);...riesco a caricarlo e a ottenere, come fatto prima, il messaggio "ciao merdaccia".
Adesso provo ad aumentare il numero degli elementi %lt;controllo> nel file XML:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE documento [ <!ELEMENT documento (capitolo)> <!ELEMENT capitolo (#PCDATA)> ]> <documento> <capitolo> "ciao merdaccia" </capitolo> <capitolo> "ciao deficiente" </capitolo> </documento>...e con quel codice javaScript non ottengo nulla, ma il debugger mi dà il messaggio di errore:
Impossibile ottenere il valore della proprietà 'getElementsByTagName': oggetto nullo o non definito
Perchè?
L'ho scoperto subito: perchè quando io specifico i figli dell'elemento <documento> uso la seguente sintassi:
<!ELEMENT documento (capitolo)>che significa che l'elemento documento ha un solo figlio, mentre poi, di fatto, ne ha due.
Allora metto il simbolo +, che significa "uno o più figli":
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE documento [
<!ELEMENT documento (capitolo+)>
<!ELEMENT capitolo (#PCDATA)>
]>
<documento>
<capitolo>
"ciao merdaccia"
</capitolo>
<capitolo>
"ciao deficiente"
</capitolo>
</documento>
e ottengo di nuovo l'insulto di prima, regolarmente, perchè adesso si specifica che i figli dell'elemento documento possono essere uno o più.
Adesso uso il simboletto ? che significa "zero o uno figli".
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE documento [
<!ELEMENT documento (capitolo?)>
<!ELEMENT capitolo (#PCDATA)>
]>
<documento>
<capitolo>
"ciao merdaccia"
</capitolo>
<capitolo>
"ciao deficiente"
</capitolo>
</documento>
e non ottengo niente, perchè qui i figli sono due!
Provo infine a usare il simboletto *, che significa "zero o più":
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE documento [
<!ELEMENT documento (capitolo*)>
<!ELEMENT capitolo (#PCDATA)>
]>
<documento>
<capitolo>
"ciao merdaccia"
</capitolo>
<capitolo>
"ciao deficiente"
</capitolo>
</documento>
E ottengo il mio caro "ciao merdaccia", oppure, se chiedo il contenuto del secondo elemento:
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("prova.xml");
var root = xmlDoc.documentElement;
alert(root.getElementsByTagName("capitolo")[1].text);
ottengo un meraviglioso "ciao deficiente"!
Nonostante gli insulti, sono contento!!!
Nessun commento:
Posta un commento