* new libxml2 samples

git-svn-id: trunk@11634 -
This commit is contained in:
ivost 2008-08-22 22:06:19 +00:00
parent 52666b1dc0
commit 510e22e898
6 changed files with 247 additions and 60 deletions

2
.gitattributes vendored
View File

@ -3292,6 +3292,8 @@ packages/libxml/examples/reader1.pas svneol=native#text/plain
packages/libxml/examples/reader2.pas svneol=native#text/plain
packages/libxml/examples/test1.xml svneol=native#text/plain
packages/libxml/examples/test2.xml svneol=native#text/plain
packages/libxml/examples/tree1.pas svneol=native#text/plain
packages/libxml/examples/tree2.pas svneol=native#text/plain
packages/libxml/fpmake.pp svneol=native#text/plain
packages/libxml/src/HTMLparser.inc svneol=native#text/plain
packages/libxml/src/HTMLtree.inc svneol=native#text/plain

View File

@ -259,178 +259,178 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-darwin)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-nds)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),armeb-linux)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_PROGRAMS+=reader1 reader2 io1 io2
override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
override INSTALL_FPCPACKAGE=y
ifdef REQUIRE_UNITSDIR

View File

@ -3,7 +3,7 @@
#
[target]
programs=reader1 reader2 io1 io2
programs=reader1 reader2 io1 io2 tree1 tree2
[require]
#packages=

View File

@ -32,7 +32,7 @@ var
begin
name := xmlTextReaderConstName(reader);
if not assigned(name) then
name := pchar('--'); // BAD_CAST !!!!
name := BAD_CAST('--');
value := xmlTextReaderConstValue(reader);

View File

@ -0,0 +1,76 @@
(**
* section: Tree
* synopsis: Navigates a tree to print element names
* purpose: Parse a file to a tree, use xmlDocGetRootElement() to
* get the root element, then walk the document and print
* all the element name in document order.
* usage: tree1 filename_or_URL
* test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp
* author: Dodji Seketeli
* copy: see Copyright for the status of this software.
*)
program tree1;
{$mode objfpc}
uses
ctypes,
libxml2,
exutils,
SysUtils;
procedure print_element_names(a_node: xmlNodePtr);
var
cur_node: xmlNodePtr;
begin
cur_node := a_node;
while assigned(cur_node) do
begin
if cur_node^._type = XML_ELEMENT_NODE then
printfn('node type: Element, name: %s', [cur_node^.name]);
print_element_names(cur_node^.children);
cur_node := cur_node^.next;
end;
end;
var
doc: xmlDocPtr;
root_element: xmlNodePtr;
begin
if paramCount <> 1 then
halt(1);
(*
* this initialize the library and check potential ABI mismatches
* between the version it was compiled for and the actual shared
* library used.
*)
LIBXML_TEST_VERSION;
(* parse the file and get the DOM *)
doc := xmlReadFile(pchar(paramStr(1)), nil, 0);
if not assigned(doc) then
begin
printfn('error: could not parse file %s', [paramStr(1)]);
halt(1);
end;
(* Get the root element node *)
root_element := xmlDocGetRootElement(doc);
print_element_names(root_element);
(* free the document *)
xmlFreeDoc(doc);
(*
* Free the global variables that may
* have been allocated by the parser.
*)
xmlCleanupParser();
end.

View File

@ -0,0 +1,109 @@
(*
* section: Tree
* synopsis: Creates a tree
* purpose: Shows how to create document, nodes and dump it to stdout or file.
* usage: tree2 <filename> -Default output: stdout
* test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
* author: Lucas Brasilino <brasilino@recife.pe.gov.br>
* copy: see Copyright for the status of this software
*)
program tree2;
{$mode objfpc}
uses
ctypes,
libxml2,
exutils,
SysUtils;
var
doc: xmlDocPtr;
root_node, node, node1: xmlNodePtr;
dtd: xmlDtdPtr;
buff: array[0..255] of char;
i, j: cint;
begin
LIBXML_TEST_VERSION;
(*
* Creates a new document, a node and set it as a root node
*)
doc := xmlNewDoc(BAD_CAST('1.0'));
root_node := xmlNewNode(nil, BAD_CAST('root'));
xmlDocSetRootElement(doc, root_node);
(*
* Creates a DTD declaration. Isn't mandatory.
*)
dtd := xmlCreateIntSubset(doc, BAD_CAST('root'), nil, BAD_CAST('tree2.dtd'));
(*
* xmlNewChild() creates a new node, which is "attached" as child node
* of root_node node.
*)
xmlNewChild(root_node, nil, BAD_CAST('node1'), BAD_CAST('content of node 1'));
(*
* The same as above, but the new child node doesn't have a content
*)
xmlNewChild(root_node, nil, BAD_CAST('node2'), nil);
(*
* xmlNewProp() creates attributes, which is "attached" to an node.
* It returns xmlAttrPtr, which isn't used here.
*)
node := xmlNewChild(root_node, nil, BAD_CAST('node3'), BAD_CAST('this node has attributes'));
xmlNewProp(node, BAD_CAST('attribute'), BAD_CAST('yes'));
xmlNewProp(node, BAD_CAST('foo'), BAD_CAST('bar'));
(*
* Here goes another way to create nodes. xmlNewNode() and xmlNewText
* creates a node and a text node separately. They are "attached"
* by xmlAddChild()
*)
node := xmlNewNode(nil, BAD_CAST('node4'));
node1 := xmlNewText(BAD_CAST('other way to create content (which is also a node)'));
xmlAddChild(node, node1);
xmlAddChild(root_node, node);
(*
* A simple loop that "automates" nodes creation
*)
for i := 5 to 6 do
begin
buff := 'node'+inttostr(i);
node := xmlNewChild(root_node, nil, BAD_CAST(buff), nil);
for j := 1 to 3 do
begin
buff := 'node'+inttostr(i)+inttostr(j);
node1 := xmlNewChild(node, nil, BAD_CAST(buff), nil);
if j mod 2 = 0 then
xmlNewProp(node1, BAD_CAST('odd'), BAD_CAST('no'))
else
xmlNewProp(node1, BAD_CAST('odd'), BAD_CAST('yes'));
end;
end;
(*
* Dumping document to stdio or file
*)
docdump(doc);
//xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
(*free the document *)
xmlFreeDoc(doc);
(*
* Free the global variables that may
* have been allocated by the parser.
*)
xmlCleanupParser();
(*
* this is to debug memory for regression tests
*)
xmlMemoryDump();
end.