GLS.CrossXML.pas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // The multimedia graphics platform GLScene https://github.com/glscene
  3. //
  4. unit GLS.CrossXML;
  5. (* Cross XML routines *)
  6. interface
  7. uses
  8. System.Classes,
  9. System.SysUtils,
  10. System.Variants,
  11. XMLIntf,
  12. XMLDoc,
  13. XMLDom;
  14. type
  15. GLSXMLDocument = IXMLDocument;
  16. GLSXMLNode = IXMLNode;
  17. GLSDOMNode = IDOMNode;
  18. function GLSNewXMLDocument: GLSXMLDocument;
  19. procedure ReleaseXMLDocument(var ADoc: GLSXMLDocument);
  20. procedure WriteXMLFile(var ADoc: GLSXMLDocument; AStream: TStream); overload;
  21. procedure ReadXMLFile(var ADoc: GLSXMLDocument; AStream: TStream); overload;
  22. procedure WriteXMLFile(var ADoc: GLSXMLDocument; AFileName: string); overload;
  23. procedure ReadXMLFile(var ADoc: GLSXMLDocument; AFileName: string); overload;
  24. function GetXMLAttribute(const XMLNode: GLSXMLNode; const AttrName: string; out Value: string): Boolean; overload;
  25. function GetXMLAttribute(const XMLNode: GLSXMLNode; Idx: Integer): GLSXMLNode; overload;
  26. procedure SetXMLAttribute(const XMLNode: GLSXMLNode; const AttrName: string; const Value: string); overload;
  27. procedure SetXMLAttribute(const DOMNode: GLSDOMNode; const AttrName: string; const Value: string); overload;
  28. function GetXMLAttributeCount(const XMLNode: GLSXMLNode): Integer;
  29. function FindXMLNode(const ParentNode: GLSXMLNode; const NodeName: string; out ChildNode: GLSXMLNode): Boolean;
  30. function CreateDOMNode(const ParentNode: GLSDOMNode; const NodeName: string): GLSDOMNode;
  31. procedure SetXMLText(const DOMNode: GLSDOMNode; const AText: string);
  32. function GetXMLText(const XMLNode: GLSXMLNode; out AText: string): Boolean;
  33. //---------------------------------------------------------------------
  34. implementation
  35. //---------------------------------------------------------------------
  36. function GLSNewXMLDocument: GLSXMLDocument;
  37. begin
  38. Result := NewXMLDocument();
  39. end;
  40. procedure ReleaseXMLDocument(var ADoc: GLSXMLDocument);
  41. begin
  42. ADoc := nil;
  43. end;
  44. procedure WriteXMLFile(var ADoc: GLSXMLDocument; AStream: TStream);
  45. begin
  46. ADoc.SaveToStream(AStream);
  47. end;
  48. procedure ReadXMLFile(var ADoc: GLSXMLDocument; AStream: TStream);
  49. begin
  50. ADoc.LoadFromStream(AStream);
  51. end;
  52. procedure WriteXMLFile(var ADoc: GLSXMLDocument; AFileName: string); overload;
  53. begin
  54. ADoc.SaveToFile(AFileName);
  55. end;
  56. procedure ReadXMLFile(var ADoc: GLSXMLDocument; AFileName: string); overload;
  57. begin
  58. ADoc.LoadFromFile(AFileName);
  59. end;
  60. function GetXMLAttribute(const XMLNode: GLSXMLNode; const AttrName: string; out Value: string): Boolean;
  61. var
  62. attr: OleVariant;
  63. begin
  64. attr := 0;
  65. attr := XMLNode.Attributes[AttrName];
  66. Result := not VarIsNull(attr);
  67. if Result then
  68. Value := attr;
  69. end;
  70. procedure SetXMLAttribute(const XMLNode: GLSXMLNode; const AttrName: string; const Value: string);
  71. begin
  72. XMLNode.Attributes[AttrName] := Value;
  73. end;
  74. procedure SetXMLAttribute(const DOMNode: GLSDOMNode; const AttrName: string; const Value: string);
  75. var
  76. E: IDOMElement;
  77. begin
  78. E := DOMNode as IDOMElement;
  79. E.SetAttribute(AttrName, Value);
  80. end;
  81. function FindXMLNode(const ParentNode: GLSXMLNode; const NodeName: string; out ChildNode: GLSXMLNode): Boolean;
  82. begin
  83. ChildNode := ParentNode.ChildNodes.FindNode(NodeName);
  84. Result := Assigned(ChildNode);
  85. end;
  86. function CreateDOMNode(const ParentNode: GLSDOMNode; const NodeName: string): GLSDOMNode;
  87. begin
  88. Result := ParentNode.OwnerDocument.CreateElement(NodeName);
  89. ParentNode.AppendChild(Result);
  90. end;
  91. procedure SetXMLText(const DOMNode: GLSDOMNode; const AText: string);
  92. begin
  93. DOMNode.AppendChild(DOMNode.ownerDocument.createTextNode(AText));
  94. end;
  95. function GetXMLText(const XMLNode: GLSXMLNode; out AText: string): Boolean;
  96. begin
  97. AText := XMLNode.Text;
  98. Result := Length(AText)>0;
  99. end;
  100. function GetXMLAttributeCount(const XMLNode: GLSXMLNode): Integer;
  101. begin
  102. Result := XMLNode.AttributeNodes.Count;
  103. end;
  104. function GetXMLAttribute(const XMLNode: GLSXMLNode; Idx: Integer): GLSXMLNode;
  105. begin
  106. Result := XMLNode.AttributeNodes[Idx];
  107. end;
  108. end.