Bonjour,

Je crée un vbscript qui parcours plusieurs fichiers séquentiels à fin de rassembler toutes les données dans un seul fichier xml.

J'ai besoin d'utiliser la méthode:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.nodeFromID(stopId)
, comme ça si le script à déja été lancé et que fichier xml existe déjà, je n'ajoute que les nouveau éléments.


et je lis dans la doc msdn:

To reference a node with nodefromID, the node must be typed as ID in the schema or document type definition (DTD). Simply naming an attribute "ID" does not set its data type.
Du coup, lorsque je crée mon fichier j'ajoute le DTD:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function GetNewXmlWaypointDoc(xmlDoc)
	set xmlWriter = CreateObject("MSXML2.MXXMLWriter")
	xmlWriter.output = ""
	xmlWriter.indent = True
	xmlWriter.encoding = "ISO-8859-1"
	xmlWriter.standalone = True
 
	xmlWriter.startDocument
	xmlWriter.startDTD "Waypoints", "", ""
	xmlWriter.elementDecl "Waypoints", "(Stop*)"
	xmlWriter.attributeDecl "Waypoints", "datum", "CDATA", "#REQUIRED", ""
	xmlWriter.elementDecl "Stop", "(Waypoint+)"
	xmlWriter.attributeDecl "Stop", "id", "ID", "#REQUIRED", ""
	xmlWriter.elementDecl "Waypoint", "(Latitude, Longitude)"
	xmlWriter.attributeDecl "Waypoint", "date", "CDATA", "#REQUIRED", ""
	xmlWriter.elementDecl "Latitude", "ANY"
	xmlWriter.elementDecl "Longitude", "ANY"
	xmlWriter.endDTD
	set saxAttributes = CreateObject("MSXML2.SAXAttributes")
	saxAttributes.addAttribute "", "", "datum", "CDATA", "WGS84"
	xmlWriter.startElement "", "", "Waypoints", saxAttributes
	xmlWriter.endElement "", "", "Waypoints"
	saxAttributes.Clear
 
	xmlWriter.endDocument
	xmlWriter.flush
 
 	If NOT xmlDoc.LoadXML(xmlWriter.output) Then
		MsgBox xmlDoc.parseError.reason
	End If
 
	Set xmlWriter = Nothing
End Function
puis je remplis mon xmlDoc avec des choses plus merveilleuses les unes que les autres.

Enfin pour que la présentation soit jolie je veux parser mon xmlDoc et le sauver.
Je procède comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Function ParseAndSave(filePath, xmlDoc)
	set xmlWriter = CreateObject("MSXML2.MXXMLWriter") 
	set xmlReader = CreateObject("MSXML2.SAXXMLReader")
	Set xmlStream = CreateObject("ADODB.STREAM")
	xmlStream.Open
	xmlStream.Charset = "ISO-8859-1"
 
	xmlWriter.output = xmlStream
	Set xmlReader.contentHandler = xmlWriter
	Set xmlReader.DTDHandler = xmlWriter
	Set xmlReader.errorHandler = xmlWriter
	xmlReader.parse xmlDoc
	xmlWriter.flush
 
	xmlStream.SaveToFile filePath, 2
 
	xmlStream.Close
	Set xmlStream = Nothing
	Set xmlReader = Nothing
	Set xmlWriter = Nothing
End Function
Ca sauve bien le fichier xml mais sans le dtd... comment faire pour que le dtd soit ajouté au fichier?