Преглед на файлове

* new libxml2 samples

git-svn-id: trunk@11634 -
ivost преди 17 години
родител
ревизия
510e22e898

+ 2 - 0
.gitattributes

@@ -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

+ 58 - 58
packages/libxml/examples/Makefile

@@ -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

+ 1 - 1
packages/libxml/examples/Makefile.fpc

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

+ 1 - 1
packages/libxml/examples/reader1.pas

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

+ 76 - 0
packages/libxml/examples/tree1.pas

@@ -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.

+ 109 - 0
packages/libxml/examples/tree2.pas

@@ -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 <[email protected]>
+ * 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.