VS:WriteXMLFile

From Vectorworks Developer
Jump to navigation Jump to search

.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix

Description

Writes an XML file. whichPath is the directory specifier; it accepts the same values as GetFolderPath. If whichPath is -1, the filename is taken by itself, without prepending a directory onto it.

FUNCTION WriteXMLFile(
XMLHandle :LONGINT;
whichPath :INTEGER;
filename :STRING) :INTEGER;
def vs.WriteXMLFile(XMLHandle, whichPath, filename):
    return INTEGER

Parameters

XMLHandle LONGINT
whichPath INTEGER
filename STRING

Remarks

Looks like the whichPath argument no longer supports 1 or 12. The other indexes should still work.

For example, this does not work:

xmlFileName := 'XML Test File.xml';
result := WriteXMLFile(hXML, 12, xmlFileName);

But this does:

xmlFileName := Concat(GetFolderPath(12), 'XML Test File.xml');
result := WriteXMLFile(hXML, -1, xmlFileName);

Result Values:

No Error = 0;
Unknown Error = -1;
Invalid Path Error = -2;
Element Not Found Error	= -3;
Attribute Not FoundError = -4;
CDATA Section Not Found Error = -5;
Memory Error = -20;
Invalid XML Handle Error = -21;
Invalid Parameters Error = -22;
Parser Error = -23;
No Child Or Sibling Nodes = -24;

Example

VectorScript

PROCEDURE WriteXML;
{Writes data to an XML file.}

CONST
   kAppFolder = 1;

VAR
   hXML            :LONGINT;
   xmlFile         :STRING;
   result          :INTEGER;
   elementResult   :STRING;
   attributeResult :STRING;
   pathResult      :STRING;
   cdata           :DYNARRAY [] of CHAR;

BEGIN
   ALLOCATE  cdata [1..1024];
   cdata := Copy('00 01 02 03 04 05 06 07', 1, 23);
   cdata := Concat(cdata, Chr(13), '08 09 10 1a 1b 1c 1d 1e');
   cdata := Concat(cdata, Chr(13), '1f 20 21 22 23 24 25 26');

   hXML := InitXML;

   IF hXML <> 0 THEN BEGIN
      xmlFile := 'XML Test File.xml';
      result := CreateNewXMLDocument(hXML, 'XMLTest');

      result := SetElementValue  (hXML, '/XMLTest/Tools/Computers/Platform/Macintosh/CPU', 'G4');
      result := SetElementValue  (hXML, '/XMLTest/Tools/Computers/Platform/Macintosh/Disk', 'SCSI');
      result := SetElementValue  (hXML, '/XMLTest/Tools/Computers/Platform/Windows/CPU', 'P4');
      result := SetElementValue  (hXML, '/XMLTest/Tools/Computers/Platform/Windows/Disk', 'EIDE');

      result := SetAttributeValue(hXML, '/XMLTest/Tools/Computers/Platform/Windows/CPU', 'Speed', '3.0 GHz');
      result := SetAttributeValue(hXML, '/XMLTest/Tools/Computers/Platform/Macintosh/CPU', 'Speed', '1.2 GHz');

      result := SetAttributeValue(hXML, '/XMLTest/Tools/Computers/Platform/Windows/Disk', 'Size', '300 GB');
      result := SetAttributeValue(hXML, '/XMLTest/Tools/Computers/Platform/Macintosh/Disk', 'Size', '450 GB');

      result := SetAttributeValue(hXML, '/XMLTest/Tools/Hardware/Screwdriver/Regular', 'Head', 'Flat');
      result := SetAttributeValue(hXML, '/XMLTest/Tools/Hardware/Screwdriver/Philips', 'Head', '4-point');
      result := SetElementValue  (hXML, '/XMLTest/Tools/Hardware/Wrench/Fixed/Units/Metric', 'mm');
      result := SetElementValue  (hXML, '/XMLTest/Tools/Hardware/Wrench/Fixed/Units/English', 'inches');
      result := SetAttributeValue(hXML, '/XMLTest/Tools/Hardware/Wrench/Non-fixed/Adjustable', 'slide', 'Horizontal');
      result := SetAttributeValue(hXML, '/XMLTest/Tools/Hardware/Wrench/Non-fixed/Monkey', 'slide', 'Vertical');

      {Write some CDATA strings}
      result := SetCDATA(hXML, '/XMLTest/Tools/BinaryData/MiscData', cdata);
      
      result := WriteXMLFile(hXML, kAppFolder, xmlFile);
      Message('result: ', result);
      result := ReleaseXML(hXML);
   END ELSE BEGIN
      SysBeep;
      Message('Could not initialize XML reader.');
   END;
END;
Run(WriteXML);

Python


Version

Availability: from All Versions

This is drop-in function.