summaryrefslogtreecommitdiff
path: root/packages/libxml
diff options
context:
space:
mode:
authorivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-02-26 00:28:44 +0000
committerivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-02-26 00:28:44 +0000
commitfd5945d7f079889bc9276b7f2f55e55fd27c9cec (patch)
tree0861f4a2c034d6c27fd863a139878f22e1fffaba /packages/libxml
parentb61bc5657b80e4dc9df05b04ca5a9a88dbc8e149 (diff)
downloadfpc-fd5945d7f079889bc9276b7f2f55e55fd27c9cec.tar.gz
* added new xml node reader functions
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@12798 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/libxml')
-rw-r--r--packages/libxml/src/xmlxsd.pas284
1 files changed, 282 insertions, 2 deletions
diff --git a/packages/libxml/src/xmlxsd.pas b/packages/libxml/src/xmlxsd.pas
index 8f043e2983..9b4b36e5b0 100644
--- a/packages/libxml/src/xmlxsd.pas
+++ b/packages/libxml/src/xmlxsd.pas
@@ -215,6 +215,52 @@ procedure xsdGetChildUnsignedShort(node: xmlNodePtr; name, nameSpace: xmlCharPtr
procedure xsdGetChildUnsignedInt(node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longword; Index: Integer = 0);
procedure xsdGetChildUnsignedLong(node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: QWord; Index: Integer = 0);
+{ Node parsing functions }
+function xsdTryNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlNodePtr;
+function xsdTryNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var last: xmlNodePtr): Boolean;
+function xsdTryNextChars(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlCharPtr;
+function xsdTryNextString(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: String): Boolean;
+function xsdTryNextBoolean(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Boolean): Boolean;
+function xsdTryNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day: Longword; Timezone: PTimezone = nil; BC: PBoolean = nil): Boolean;
+function xsdTryNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil): Boolean;
+function xsdTryNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone = nil): Boolean;
+function xsdTryNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil): Boolean;
+function xsdTryNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day, Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone = nil; BC: PBoolean = nil): Boolean;
+function xsdTryNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil): Boolean;
+function xsdTryNextDecimal(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Extended): Boolean;
+function xsdTryNextDouble(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Double): Boolean;
+function xsdTryNextFloat(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Single): Boolean;
+function xsdTryNextByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Shortint): Boolean;
+function xsdTryNextShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Smallint): Boolean;
+function xsdTryNextInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longint): Boolean;
+function xsdTryNextLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Int64): Boolean;
+function xsdTryNextUnsignedByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Byte): Boolean;
+function xsdTryNextUnsignedShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Word): Boolean;
+function xsdTryNextUnsignedInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longword): Boolean;
+function xsdTryNextUnsignedLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: QWord): Boolean;
+
+function xsdNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlNodePtr;
+function xsdNextChars(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlCharPtr;
+procedure xsdNextString(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: String);
+procedure xsdNextBoolean(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Boolean);
+procedure xsdNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day: Longword; Timezone: PTimezone = nil; BC: PBoolean = nil);
+procedure xsdNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil);
+procedure xsdNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone = nil);
+procedure xsdNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil);
+procedure xsdNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day, Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone = nil; BC: PBoolean = nil);
+procedure xsdNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone = nil);
+procedure xsdNextDecimal(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Extended);
+procedure xsdNextDouble(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Double);
+procedure xsdNextFloat(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Single);
+procedure xsdNextByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Shortint);
+procedure xsdNextShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Smallint);
+procedure xsdNextInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longint);
+procedure xsdNextLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Int64);
+procedure xsdNextUnsignedByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Byte);
+procedure xsdNextUnsignedShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Word);
+procedure xsdNextUnsignedInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longword);
+procedure xsdNextUnsignedLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: QWord);
+
{ Property query functions }
function xsdTestProp(attr: xmlAttrPtr; name, nameSpace: xmlCharPtr): Boolean;
@@ -1303,7 +1349,7 @@ end;
function xsdTestNode(node: xmlNodePtr; name, nameSpace: xmlCharPtr): Boolean;
begin
- Result := (xmlStrEqual(name, node^.name) <> 0) and ((nameSpace = NS_IGNORE) or
+ Result := (node <> nil) and (xmlStrEqual(name, node^.name) <> 0) and ((nameSpace = NS_IGNORE) or
((nameSpace = NS_EXCLUDE) and (node^.ns = nil)) or
((nameSpace <> NS_EXCLUDE) and (nameSpace <> NS_IGNORE) and (node^.ns <> nil) and (xmlStrEqual(nameSpace, node^.ns^.href) <> 0)));
end;
@@ -1534,9 +1580,243 @@ begin
xsdParseUnsignedLong(xsdGetChildChars(node, name, nameSpace, Index), Value);
end;
+function xsdTryNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlNodePtr;
+begin
+ while Assigned(node) and (node^._type = XML_TEXT_NODE) do
+ node := node^.next;
+
+ if xsdTestNode(node, name, nameSpace) then
+ begin
+ Result := node;
+ node := node^.next;
+ end else
+ Result := nil;
+end;
+
+function xsdTryNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var last: xmlNodePtr): Boolean;
+begin
+ while Assigned(node) and (node^._type = XML_TEXT_NODE) do
+ node := node^.next;
+
+ if xsdTestNode(node, name, nameSpace) then
+ begin
+ last := node;
+ node := node^.next;
+ Result := True;
+ end else
+ Result := False;
+end;
+
+function xsdTryNextChars(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlCharPtr;
+begin
+ Result := xmlNodeGetContent(xsdTryNext(node, name, nameSpace));
+end;
+
+function xsdTryNextString(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: String): Boolean;
+begin
+ Result := xsdTryParseString(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextBoolean(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Boolean): Boolean;
+begin
+ Result := xsdTryParseBoolean(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day: Longword; Timezone: PTimezone; BC: PBoolean): Boolean;
+begin
+ Result := xsdTryParseDate(xsdTryNextChars(node, name, nameSpace), Year, Month, Day, Timezone, BC);
+end;
+
+function xsdTryNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone): Boolean;
+begin
+ Result := xsdTryParseDate(xsdTryNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+function xsdTryNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone): Boolean;
+begin
+ Result := xsdTryParseTime(xsdTryNextChars(node, name, nameSpace), Hour, Minute, Second, Milliseconds, Timezone);
+end;
+
+function xsdTryNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone): Boolean;
+begin
+ Result := xsdTryParseTime(xsdTryNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+function xsdTryNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day, Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone; BC: PBoolean): Boolean;
+begin
+ Result := xsdTryParseDateTime(xsdTryNextChars(node, name, nameSpace), Year, Month, Day, Hour, Minute, Second, Milliseconds, Timezone, BC);
+end;
+
+function xsdTryNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone): Boolean;
+begin
+ Result := xsdTryParseDateTime(xsdTryNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+function xsdTryNextDecimal(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Extended): Boolean;
+begin
+ Result := xsdTryParseDecimal(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextDouble(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Double): Boolean;
+begin
+ Result := xsdTryParseDouble(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextFloat(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Single): Boolean;
+begin
+ Result := xsdTryParseFloat(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Shortint): Boolean;
+begin
+ Result := xsdTryParseByte(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Smallint): Boolean;
+begin
+ Result := xsdTryParseShort(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longint): Boolean;
+begin
+ Result := xsdTryParseInt(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Int64): Boolean;
+begin
+ Result := xsdTryParseLong(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextUnsignedByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Byte): Boolean;
+begin
+ Result := xsdTryParseUnsignedByte(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextUnsignedShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Word): Boolean;
+begin
+ Result := xsdTryParseUnsignedShort(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextUnsignedInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longword): Boolean;
+begin
+ Result := xsdTryParseUnsignedInt(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdTryNextUnsignedLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: QWord): Boolean;
+begin
+ Result := xsdTryParseUnsignedLong(xsdTryNextChars(node, name, nameSpace), Value);
+end;
+
+function xsdNext(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlNodePtr;
+begin
+ Result := xsdTryNext(node, name, nameSpace);
+ if not Assigned(Result) then
+ raise XSDException.CreateNode(ChildNotFound, name, nameSpace);
+end;
+
+function xsdNextChars(var node: xmlNodePtr; name, nameSpace: xmlCharPtr): xmlCharPtr;
+begin
+ Result := xmlNodeGetContent(xsdNext(node, name, nameSpace));
+end;
+
+procedure xsdNextString(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: String);
+begin
+ xsdParseString(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextBoolean(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Boolean);
+begin
+ xsdParseBoolean(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day: Longword; Timezone: PTimezone; BC: PBoolean);
+begin
+ xsdParseDate(xsdNextChars(node, name, nameSpace), Year, Month, Day, Timezone, BC);
+end;
+
+procedure xsdNextDate(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone);
+begin
+ xsdParseDate(xsdNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+procedure xsdNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone);
+begin
+ xsdParseTime(xsdNextChars(node, name, nameSpace), Hour, Minute, Second, Milliseconds, Timezone);
+end;
+
+procedure xsdNextTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone);
+begin
+ xsdParseTime(xsdNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+procedure xsdNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Year, Month, Day, Hour, Minute, Second, Milliseconds: Longword; Timezone: PTimezone; BC: PBoolean);
+begin
+ xsdParseDateTime(xsdNextChars(node, name, nameSpace), Year, Month, Day, Hour, Minute, Second, Milliseconds, Timezone, BC);
+end;
+
+procedure xsdNextDateTime(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: TDateTime; Timezone: PTimezone);
+begin
+ xsdParseDateTime(xsdNextChars(node, name, nameSpace), Value, Timezone);
+end;
+
+procedure xsdNextDecimal(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Extended);
+begin
+ xsdParseDecimal(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextDouble(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Double);
+begin
+ xsdParseDouble(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextFloat(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Single);
+begin
+ xsdParseFloat(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Shortint);
+begin
+ xsdParseByte(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Smallint);
+begin
+ xsdParseShort(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longint);
+begin
+ xsdParseInt(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Int64);
+begin
+ xsdParseLong(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextUnsignedByte(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Byte);
+begin
+ xsdParseUnsignedByte(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextUnsignedShort(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Word);
+begin
+ xsdParseUnsignedShort(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextUnsignedInt(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: Longword);
+begin
+ xsdParseUnsignedInt(xsdNextChars(node, name, nameSpace), Value);
+end;
+
+procedure xsdNextUnsignedLong(var node: xmlNodePtr; name, nameSpace: xmlCharPtr; var Value: QWord);
+begin
+ xsdParseUnsignedLong(xsdNextChars(node, name, nameSpace), Value);
+end;
+
function xsdTestProp(attr: xmlAttrPtr; name, nameSpace: xmlCharPtr): Boolean;
begin
- Result := (xmlStrEqual(name, attr^.name) <> 0) and ((nameSpace = NS_IGNORE) or
+ Result := (attr <> nil) and (xmlStrEqual(name, attr^.name) <> 0) and ((nameSpace = NS_IGNORE) or
((nameSpace = NS_EXCLUDE) and (attr^.ns = nil)) or
((nameSpace <> NS_EXCLUDE) and (nameSpace <> NS_IGNORE) and (attr^.ns <> nil) and (xmlStrEqual(nameSpace, attr^.ns^.href) <> 0)));
end;