More work toward 2.2.5, integrated a number of patches

- configure.in Makefile.am win32config.h.in: trying to cleanup
  make distcheck .... huh ...
- include/Makefile.am include/win32config.h: new directory
  for includes
- win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
  updated teh makefiles and instructions for WIN32
- xpath.c: small fixes
- test/XPath/ results/XPath: updated the testcases and results
- HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
  suggested patches
- valid.c: fixed an ID bug
Daniel
This commit is contained in:
Daniel Veillard 2000-10-10 23:01:31 +00:00
parent b71379b796
commit e8282edd45
20 changed files with 571 additions and 420 deletions

View File

@ -1,3 +1,18 @@
Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
* More work toward 2.2.5, integrated a number of patches
* configure.in Makefile.am win32config.h.in: trying to cleanup
make distcheck .... huh ...
* include/Makefile.am include/win32config.h: new directory
for includes
* win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
updated teh makefiles and instructions for WIN32
* xpath.c: small fixes
* test/XPath/ results/XPath: updated the testcases and results
* HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
suggested patches
* valid.c: fixed an ID bug
Mon Oct 9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
* moved xml-error.h to xmlerror.h: seems this allowed to bypass

View File

@ -14,7 +14,6 @@
#include <libxml/xmlversion.h>
#ifdef LIBXML_HTML_ENABLED
#include <stdio.h>
#include <string.h>
#ifdef HAVE_CTYPE_H
@ -1786,7 +1785,7 @@ htmlParseHTMLName(htmlParserCtxtPtr ctxt) {
while ((i < HTML_PARSER_BUFFER_SIZE) &&
((IS_LETTER(CUR)) || (IS_DIGIT(CUR)) ||
(CUR == ':') || (CUR == '_'))) {
(CUR == ':') || (CUR == '-') || (CUR == '_'))) {
if ((CUR >= 'A') && (CUR <= 'Z')) loc[i] = CUR + 0x20;
else loc[i] = CUR;
i++;

View File

@ -1,8 +1,8 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = doc
SUBDIRS = include doc
INCLUDES = -I@srcdir@/include @Z_CFLAGS@ @CORBA_CFLAGS@
INCLUDES = -I@srcdir@/include -I./include @Z_CFLAGS@ @CORBA_CFLAGS@
noinst_PROGRAMS=testSAX testHTML testXPath testURI
@ -35,29 +35,6 @@ libxml_la_SOURCES = \
nanohttp.c \
nanoftp.c
xmlincdir = $(includedir)/libxml
xmlinc_HEADERS = \
include/libxml/SAX.h \
include/libxml/entities.h \
include/libxml/encoding.h \
include/libxml/parser.h \
include/libxml/parserInternals.h \
include/libxml/xmlerror.h \
include/libxml/HTMLparser.h \
include/libxml/HTMLtree.h \
include/libxml/debugXML.h \
include/libxml/tree.h \
include/libxml/xpath.h \
include/libxml/xmlIO.h \
include/libxml/xmlmemory.h \
include/libxml/nanohttp.h \
include/libxml/nanoftp.h \
include/libxml/uri.h \
include/libxml/valid.h \
include/libxml/xlink.h \
include/libxml/xmlversion.h
DEPS = $(top_builddir)/libxml.la
LDADDS = $(top_builddir)/libxml.la @Z_LIBS@ @M_LIBS@
@ -357,8 +334,8 @@ confexecdir=$(libdir)
confexec_DATA = xmlConf.sh
EXTRA_DIST = xmlConf.sh.in libxml.spec.in libxml.spec libxml.m4 \
example/Makefile.am example/gjobread.c example/gjobs.xml \
$(man_MANS) libxml-2.0.pc.in include/libxml/*.h.in \
win32/README.MSDev win32/libxml2/libxml2.dsp
$(man_MANS) libxml-2.0.pc.in include/libxml/*.h xmlversion.h.in \
win32/README.MSDev win32/Makefile.mingw win32/libxml2/libxml2.dsp
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libxml-2.0.pc

View File

@ -116,7 +116,7 @@ AC_CHECK_FUNC(isinf, , AC_CHECK_LIB(m, isinf,
[M_LIBS="-lm"; AC_DEFINE(HAVE_ISINF)]))
XML_LIBDIR='-L${libdir}'
XML_INCLUDEDIR='-I${srcdir}/include -I${includedir}/libxml -I${includedir}'
XML_INCLUDEDIR='-I${includedir}/libxml -I${includedir}'
XML_LIBS="-lxml $Z_LIBS $M_LIBS $LIBS"
dnl
@ -299,18 +299,26 @@ dnl create the libxml and include links needed to get dependencies right
dnl
if test ! -d $srcdir/include/libxml
then
rm -f $srcdir/include
rm -rf $srcdir/include
rm -f $srcdir/libxml
(cd $srcdir ; ln -s . include)
(cd $srcdir ; ln -s . libxml)
mkdir $srcdir/include
(cd $srcdir/include ; ln -s .. libxml)
fi
if test ! -e $srcdir/libxml
then
(cd $srcdir ; ln -s include/libxml libxml)
fi
if test ! -e include/libxml
then
rm -f include
rm -f libxml
(ln -s $srcdir/include include)
(ln -s $srcdir/include/libxml libxml)
rm -rf include
mkdir include
(cd include ; ln -s ../libxml libxml)
fi
if test ! -e libxml
then
rm -rf libxml
ln -s $srcdir/include/libxml libxml
fi
AC_OUTPUT(libxml.spec Makefile doc/Makefile example/Makefile include/libxml/xmlversion.h xml-config include/libxml/win32config.h libxml-2.0.pc)
AC_OUTPUT(libxml.spec Makefile include/Makefile doc/Makefile example/Makefile libxml/xmlversion.h xml-config libxml-2.0.pc)

28
include/Makefile.am Normal file
View File

@ -0,0 +1,28 @@
## Process this file with automake to produce Makefile.in
xmlincdir = $(includedir)
xmlinc_HEADERS = \
libxml/xmlversion.h.in \
libxml/SAX.h \
libxml/entities.h \
libxml/encoding.h \
libxml/parser.h \
libxml/parserInternals.h \
libxml/xmlerror.h \
libxml/HTMLparser.h \
libxml/HTMLtree.h \
libxml/debugXML.h \
libxml/tree.h \
libxml/xpath.h \
libxml/xmlIO.h \
libxml/xmlmemory.h \
libxml/nanohttp.h \
libxml/nanoftp.h \
libxml/uri.h \
libxml/valid.h \
libxml/xlink.h
install-exec-hook:
$(mkinstalldirs) $(xmlincdir) $(xmlincdir)/libxml

View File

@ -4,10 +4,6 @@
#define HAVE_TIME_H
#define HAVE_FCNTL_H
#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@
#define LIBXML_VERSION_STRING "@LIBXML_VERSION@"
#include <io.h>
#ifdef INCLUDE_WINSOCK

View File

@ -104,6 +104,27 @@ static int initialized = 0;
static char *proxy = NULL; /* the proxy name if any */
static int proxyPort; /* the proxy port if any */
/**
* A bit of portability macros and functions
*/
#ifdef _WINSOCKAPI_
WSADATA wsaData;
#else
#define closesocket(s) close(s)
#endif
int socket_errno(void) {
#ifdef _WINSOCKAPI_
return(WSAGetLastError());
#else
return(errno);
#endif
}
/**
* xmlNanoHTTPInit:
*
@ -118,6 +139,11 @@ xmlNanoHTTPInit(void) {
if (initialized)
return;
#ifdef _WINSOCKAPI_
if (WSAStartup(0x0101, &wsaData) != 0)
WSACleanup();
#endif
if (proxy == NULL) {
proxyPort = 80;
env = getenv("no_proxy");
@ -149,6 +175,9 @@ xmlNanoHTTPCleanup(void) {
if (proxy != NULL)
xmlFree(proxy);
initialized = 0;
#ifdef _WINSOCKAPI_
WSACleanup();
#endif
return;
}
@ -344,7 +373,7 @@ xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) {
if (ctxt->contentType != NULL) xmlFree(ctxt->contentType);
if (ctxt->location != NULL) xmlFree(ctxt->location);
ctxt->state = XML_NANO_HTTP_NONE;
if (ctxt->fd >= 0) close(ctxt->fd);
if (ctxt->fd >= 0) closesocket(ctxt->fd);
ctxt->fd = -1;
xmlFree(ctxt);
}
@ -359,7 +388,7 @@ xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) {
static void
xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt) {
if (ctxt->state & XML_NANO_HTTP_WRITE)
ctxt->last = write(ctxt->fd, ctxt->outptr, strlen(ctxt->outptr));
ctxt->last = send(ctxt->fd, ctxt->outptr, strlen(ctxt->outptr), 0);
}
/**
@ -412,7 +441,7 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) {
ctxt->content = ctxt->in + d_content;
ctxt->inrptr = ctxt->in + d_inrptr;
}
ctxt->last = read(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK);
ctxt->last = recv(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK, 0);
if (ctxt->last > 0) {
ctxt->inptr += ctxt->last;
return(ctxt->last);
@ -420,17 +449,25 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) {
if (ctxt->last == 0) {
return(0);
}
#ifdef EWOULDBLOCK
if ((ctxt->last == -1) && (errno != EWOULDBLOCK)) {
return(0);
}
if (ctxt->last == -1) {
switch (socket_errno()) {
case EINPROGRESS:
case EWOULDBLOCK:
#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK
case EAGAIN:
#endif
tv.tv_sec=10;
tv.tv_usec=0;
break;
default:
return(0);
}
}
tv.tv_sec = 10;
tv.tv_usec = 0;
FD_ZERO(&rfd);
FD_SET(ctxt->fd, &rfd);
if(select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1)
if (select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1)
return(0);
}
return(0);
@ -450,10 +487,10 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) {
static char *
xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) {
char buf[4096];
char *bp=buf;
char *bp = buf;
while(bp - buf < 4095) {
if(ctxt->inrptr == ctxt->inptr) {
while (bp - buf < 4095) {
if (ctxt->inrptr == ctxt->inptr) {
if (xmlNanoHTTPRecv(ctxt) == 0) {
if (bp == buf)
return(NULL);
@ -463,11 +500,11 @@ xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) {
}
}
*bp = *ctxt->inrptr++;
if(*bp == '\n') {
if (*bp == '\n') {
*bp = 0;
return(xmlMemStrdup(buf));
}
if(*bp != '\r')
if (*bp != '\r')
bp++;
}
buf[4095] = 0;
@ -567,7 +604,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
struct timeval tv;
int status;
if(s==-1) {
if (s==-1) {
#ifdef DEBUG_HTTP
perror("socket");
#endif
@ -576,9 +613,6 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
#ifdef _WINSOCKAPI_
{
long levents = FD_READ | FD_WRITE | FD_ACCEPT |
FD_CONNECT | FD_CLOSE ;
int rv = 0 ;
u_long one = 1;
status = ioctlsocket(s, FIONBIO, &one) == SOCKET_ERROR ? -1 : 0;
@ -590,7 +624,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
status = IOCTL(s, FIONBIO, &enable);
}
#else /* VMS */
if((status = fcntl(s, F_GETFL, 0)) != -1) {
if ((status = fcntl(s, F_GETFL, 0)) != -1) {
#ifdef O_NONBLOCK
status |= O_NONBLOCK;
#else /* O_NONBLOCK */
@ -600,11 +634,11 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
#endif /* !O_NONBLOCK */
status = fcntl(s, F_SETFL, status);
}
if(status < 0) {
if (status < 0) {
#ifdef DEBUG_HTTP
perror("nonblocking");
#endif
close(s);
closesocket(s);
return(-1);
}
#endif /* !VMS */
@ -615,10 +649,10 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
sin.sin_addr = ia;
sin.sin_port = htons(port);
if((connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1) &&
(errno != EINPROGRESS)) {
if ((connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1) &&
(socket_errno() != EINPROGRESS) && (socket_errno() != EWOULDBLOCK)) {
perror("connect");
close(s);
closesocket(s);
return(-1);
}
@ -632,14 +666,14 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
{
case 0:
/* Time out */
close(s);
closesocket(s);
return(-1);
case -1:
/* Ermm.. ?? */
#ifdef DEBUG_HTTP
perror("select");
#endif
close(s);
closesocket(s);
return(-1);
}
@ -655,7 +689,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port)
return (-1);
}
if ( status ) {
close (s);
closesocket(s);
errno = status;
return (-1);
}
@ -686,7 +720,7 @@ xmlNanoHTTPConnectHost(const char *host, int port)
int s;
h=gethostbyname(host);
if(h==NULL)
if (h==NULL)
{
#ifdef DEBUG_HTTP
fprintf(stderr,"unable to resolve '%s'.\n", host);
@ -699,7 +733,7 @@ xmlNanoHTTPConnectHost(const char *host, int port)
struct in_addr ia;
memcpy(&ia, h->h_addr_list[i],4);
s = xmlNanoHTTPConnectAttempt(ia, port);
if(s != -1)
if (s != -1)
return(s);
}
@ -839,7 +873,7 @@ retry:
}
xmlNanoHTTPFreeCtxt(ctxt);
#ifdef DEBUG_HTTP
printf("Too many redirrects, aborting ...\n");
printf("Too many redirects, aborting ...\n");
#endif
return(NULL);

View File

@ -3,79 +3,79 @@
Expression: /child::EXAMPLE
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::*
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE/child::head
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT head
1 ELEMENT head
========================
Expression: /child::EXAMPLE/child::*
Object is a Node Set :
Set contains 6 nodes:
1 ELEMENT head
2 ELEMENT chapter
3 ELEMENT chapter
4 ELEMENT chapter
5 ELEMENT chapter
6 ELEMENT chapter
1 ELEMENT head
2 ELEMENT chapter
3 ELEMENT chapter
4 ELEMENT chapter
5 ELEMENT chapter
6 ELEMENT chapter
========================
Expression: /child::EXAMPLE/child::head/child::title
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
1 ELEMENT title
========================
Expression: /child::EXAMPLE/child::head/child::title/child::text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=Welcome to Gnome
1 TEXT
content=Welcome to Gnome
========================
Expression: /child::EXAMPLE/child::head/node()
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
1 ELEMENT title
========================
Expression: /descendant::title
Object is a Node Set :
Set contains 6 nodes:
1 ELEMENT title
2 ELEMENT title
3 ELEMENT title
4 ELEMENT title
5 ELEMENT title
6 ELEMENT title
1 ELEMENT title
2 ELEMENT title
3 ELEMENT title
4 ELEMENT title
5 ELEMENT title
6 ELEMENT title
========================
Expression: /descendant::p/ancestor::chapter
Object is a Node Set :
Set contains 5 nodes:
1 ELEMENT chapter
2 ELEMENT chapter
3 ELEMENT chapter
4 ELEMENT chapter
5 ELEMENT chapter
1 ELEMENT chapter
2 ELEMENT chapter
3 ELEMENT chapter
4 ELEMENT chapter
5 ELEMENT chapter

View File

@ -23,54 +23,54 @@ Set contains 0 nodes:
Expression: /child::EXAMPLE/child::chapter[3]/preceding::*
Object is a Node Set :
Set contains 10 nodes:
1 ELEMENT p
2 ELEMENT title
3 ELEMENT chapter
4 ELEMENT p
5 ELEMENT image
ATTRIBUTE href
TEXT
content=linus.gif
6 ELEMENT p
7 ELEMENT title
8 ELEMENT chapter
9 ELEMENT title
10 ELEMENT head
1 ELEMENT p
2 ELEMENT title
3 ELEMENT chapter
4 ELEMENT p
5 ELEMENT image
ATTRIBUTE href
TEXT
content=linus.gif
6 ELEMENT p
7 ELEMENT title
8 ELEMENT chapter
9 ELEMENT title
10 ELEMENT head
========================
Expression: /child::EXAMPLE/child::chapter[3]/following::*
Object is a Node Set :
Set contains 6 nodes:
1 ELEMENT chapter
2 ELEMENT title
3 ELEMENT p
4 ELEMENT chapter
5 ELEMENT title
6 ELEMENT p
1 ELEMENT chapter
2 ELEMENT title
3 ELEMENT p
4 ELEMENT chapter
5 ELEMENT title
6 ELEMENT p
========================
Expression: /child::EXAMPLE/child::chapter[1]/image/preceding::*
Object is a Node Set :
Set contains 4 nodes:
1 ELEMENT p
2 ELEMENT title
3 ELEMENT title
4 ELEMENT head
1 ELEMENT p
2 ELEMENT title
3 ELEMENT title
4 ELEMENT head
========================
Expression: /child::EXAMPLE/child::chapter[1]/image/following::*
Object is a Node Set :
Set contains 13 nodes:
1 ELEMENT p
2 ELEMENT chapter
3 ELEMENT title
4 ELEMENT p
5 ELEMENT chapter
6 ELEMENT title
7 ELEMENT p
8 ELEMENT chapter
9 ELEMENT title
10 ELEMENT p
11 ELEMENT chapter
12 ELEMENT title
13 ELEMENT p
1 ELEMENT p
2 ELEMENT chapter
3 ELEMENT title
4 ELEMENT p
5 ELEMENT chapter
6 ELEMENT title
7 ELEMENT p
8 ELEMENT chapter
9 ELEMENT title
10 ELEMENT p
11 ELEMENT chapter
12 ELEMENT title
13 ELEMENT p

View File

@ -3,31 +3,31 @@
Expression: //*[@id="root"]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE id
TEXT
content=root
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE id
TEXT
content=root
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: //*[@id="chapter2"]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter2
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter2
========================
Expression: //*[@id="chapter5"]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter5
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter5

View File

@ -3,61 +3,61 @@
Expression: /EXAMPLE
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /EXAMPLE/head
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT head
1 ELEMENT head
========================
Expression: /EXAMPLE/chapter[1]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
1 ELEMENT chapter
========================
Expression: //p
Object is a Node Set :
Set contains 2 nodes:
1 ELEMENT p
2 ELEMENT p
1 ELEMENT p
2 ELEMENT p
========================
Expression: //chapter/image
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT image
ATTRIBUTE href
TEXT
content=linus.gif
1 ELEMENT image
ATTRIBUTE href
TEXT
content=linus.gif
========================
Expression: //p/text()
Object is a Node Set :
Set contains 2 nodes:
1 TEXT
content=bla bla bla ...
2 TEXT
content=...
1 TEXT
content=bla bla bla ...
2 TEXT
content=...
========================
Expression: //p/text()[position()=1]
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=bla bla bla ...
1 TEXT
content=bla bla bla ...
========================
Expression: //p/text()[position()=last()]
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=...
1 TEXT
content=...

View File

@ -3,67 +3,67 @@
Expression: /child::*
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE/child::head
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT head
1 ELEMENT head
========================
Expression: /child::EXAMPLE/child::*
Object is a Node Set :
Set contains 2 nodes:
1 ELEMENT head
2 ELEMENT chapter
1 ELEMENT head
2 ELEMENT chapter
========================
Expression: /child::EXAMPLE/child::head/child::title
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
1 ELEMENT title
========================
Expression: /child::EXAMPLE/child::head/child::title/child::text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=Welcome to Gnome
1 TEXT
content=Welcome to Gnome
========================
Expression: /child::EXAMPLE/child::head/node()
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
1 ELEMENT title
========================
Expression: /descendant::title
Object is a Node Set :
Set contains 2 nodes:
1 ELEMENT title
2 ELEMENT title
1 ELEMENT title
2 ELEMENT title
========================
Expression: /descendant::p/ancestor::chapter
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
1 ELEMENT chapter

View File

@ -3,10 +3,10 @@
Expression: //ITEM[1]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT ITEM
ATTRIBUTE monto
TEXT
content=50.12
ATTRIBUTE divisa
TEXT
content=DOL
1 ELEMENT ITEM
ATTRIBUTE monto
TEXT
content=50.12
ATTRIBUTE divisa
TEXT
content=DOL

View File

@ -3,25 +3,25 @@
<head>
<title>Welcome to Gnome</title>
</head>
<chapter>
<chapter id="chapter1">
<title>The Linux adventure</title>
<p>bla bla bla ...</p>
<image href="linus.gif"/>
<p>...</p>
</chapter>
<chapter>
<chapter id="chapter2">
<title>Chapter 2</title>
<p>this is chapter 2 ...</p>
</chapter>
<chapter>
<chapter id="chapter3">
<title>Chapter 3</title>
<p>this is chapter 3 ...</p>
</chapter>
<chapter>
<chapter id="chapter4">
<title>Chapter 4</title>
<p>this is chapter 4 ...</p>
</chapter>
<chapter>
<chapter id="chapter5">
<title>Chapter 5</title>
<p>this is chapter 5 ...</p>
</chapter>

View File

@ -1 +1,8 @@
/following::* /preceding::* /child::EXAMPLE/preceding::* /child::EXAMPLE/following::* /child::EXAMPLE/child::chapter[3]/preceding::* /child::EXAMPLE/child::chapter[3]/following::* /child::EXAMPLE/child::chapter[1]/image/preceding::* /child::EXAMPLE/child::chapter[1]/image/following::*
/following::*
/preceding::*
/child::EXAMPLE/preceding::*
/child::EXAMPLE/following::*
/child::EXAMPLE/child::chapter[3]/preceding::*
/child::EXAMPLE/child::chapter[3]/following::*
/child::EXAMPLE/child::chapter[1]/image/preceding::*
/child::EXAMPLE/child::chapter[1]/image/following::*

View File

@ -150,7 +150,7 @@ void xmlXPAthDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth
for (i = 0;i < cur->locNr;i++) {
fprintf(output, shift);
fprintf(output, "%d :\n", i + 1);
fprintf(output, "%d : ", i + 1);
xmlXPAthDebugDumpObject(output, cur->locTab[i], depth + 1);
}
}
@ -197,16 +197,18 @@ void xmlXPAthDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
fprintf(output, "\n");
break;
case XPATH_RANGE:
fprintf(output, "Object is a range : from ");
fprintf(output, "Object is a range :\n");
fprintf(output, shift);
fprintf(output, "From ");
if (cur->index >= 0)
fprintf(output, "index %d in ", cur->index);
fprintf(output, "node");
fprintf(output, "node\n");
xmlXPAthDebugDumpNode(output, (xmlNodePtr) cur->user, depth + 1);
fprintf(output, shift);
fprintf(output, " to ");
fprintf(output, "To ");
if (cur->index2 >= 0)
fprintf(output, "index %d in ", cur->index2);
fprintf(output, "node");
fprintf(output, "node\n");
xmlXPAthDebugDumpNode(output, (xmlNodePtr) cur->user2, depth + 1);
fprintf(output, "\n");
break;

View File

@ -1823,9 +1823,7 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
if (doc == NULL) return(0);
if (attr == NULL) return(0);
if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
if (((attr->name[0] == 'I') || (attr->name[0] == 'i')) &&
((attr->name[1] == 'D') || (attr->name[1] == 'd')) &&
(attr->name[2] == 0)) return(1);
return(0);
} else if (doc->type == XML_HTML_DOCUMENT_NODE) {
if ((xmlStrEqual(BAD_CAST "id", attr->name)) ||
(xmlStrEqual(BAD_CAST "name", attr->name)))

95
win32/Makefile.mingw Normal file
View File

@ -0,0 +1,95 @@
# This Makefile will allow you to build the static library, a DLL, the
# DLL-import library, and the test executables using the "mingw" gcc
# compiler environment. This Makefile is based on Alfred Reibenschuh's
# version for 2.1.1, and was modified by Wayne Davison.
# Set "PREFIX" to the root of the mingw installed files.
PREFIX = /mingw
CC=gcc
CFLAGS=-O -Iinclude -I$(PREFIX)/include -D_WINSOCKAPI_ -fnative-struct
LDFLAGS=-L. -L$(PREFIX)/lib
LIBS=-lwsock32 -lz
AR=ar rc
DLLTOOL=dlltool
DLLWRAP=dllwrap
LIBSRCS=HTMLparser.c \
HTMLtree.c \
SAX.c \
debugXML.c \
encoding.c \
entities.c \
error.c \
nanoftp.c \
nanohttp.c \
parser.c \
parserInternals.c \
tree.c \
valid.c \
xlink.c \
xmlIO.c \
xmlmemory.c \
xpath.c \
uri.c
LIBOBJS=$(LIBSRCS:.c=.o)
OBJS=$(LIBOBJS)
LIBBASE=xml
LIB=lib$(LIBBASE).a
DLL=$(LIB:.a=.dll)
OBJ1=testHTML.o
OBJ2=testSAX.o
OBJ3=testURI.o
EXE1=$(OBJ1:.o=.exe)
EXE2=$(OBJ2:.o=.exe)
EXE3=$(OBJ3:.o=.exe)
IMPBASE=$(LIBBASE)_dll
IMP=lib$(IMPBASE).a
DEF=$(DLL:.dll=.def)
all: $(LIB) $(DLL) $(DEF) $(IMP) $(EXE1) $(EXE2) $(EXE3)
dll: $(DLL)
lib: $(LIB)
$(DLL): $(LIB) $(DEF) $(IMP)
$(DLLWRAP) --def $(DEF) --dllname $@ --output-lib $@ $(LIB) $(LDFLAGS) $(LIBS) -mwindows
$(LIB): $(LIBOBJS)
$(AR) $@ $^
$(DEF): $(LIBOBJS)
$(DLLTOOL) --kill-at --export-all -D $(DLL) --output-def $@ $^
$(IMP): $(DEF)
$(DLLTOOL) -d $< -l $@ -D $(DLL)
$(EXE1): $(OBJ1) $(LIBOBJS) $(DLL)
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
strip $@
$(EXE2): $(OBJ2) $(LIBOBJS) $(DLL)
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
strip $@
$(EXE3): $(OBJ3) $(LIBOBJS) $(LIB)
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(LIBBASE) $(LIBS)
strip $@
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm *.o *.a *.dll *.def
test: all
./$(EXE1) -c $(OBJS) | xxd | head -3

View File

@ -1,41 +1,30 @@
The configuration stuff (i.e. what should be enabled/disabled) is in xmlversion.h
I only tested it compiled fine with the current settings
If you're creating libxml2 with the "mingw" compiler, just copy the
Makefile.mingw to the root directory as "Makefile", edit the PREFIX
value, and run "make".
If you're using MSVC, here are some instructions for how you can
proceed:
The configuration stuff (i.e. what should be enabled/disabled) is in
xmlversion.h I only tested it compiled fine with the current settings
(that is nearly everything disabled, I didn't need many features)
----------------------------
How did I get everything in place so the MSDev project works from the original archive?
How did I get everything in place so the MSDev project works from the
original archive?
from the cygwin prompt (http://sources.redhat.com/cygwin) :
$ ./configure --disable-corba --without-ftp --without-http --without-html --wit
hout-xpath --without-iconv --without-debug
created a libxml directory and copied the following headers in:
HTMLparser.h entities.h tree.h xmlIO.h
HTMLtree.h nanoftp.h uri.h xmlmemory.h
SAX.h nanohttp.h valid.h xmlversion.h
debugXML.h parser.h xlink.h xpath.h
encoding.h parserInternals.h xml-error.h
modified win32config.h to comment out
#define LIBXML_VERSION 20204
#define LIBXML_VERSION_STRING "2.2.4"
(is already in xmlversion.h)
built the project file for the static library
----------------------------
diff after doing the changes and cleaning up the generated stuff:
Only in libxml2-2.2.4: MSDev
Common subdirectories: libxml2-2.2.4/SAXresult and libxml2-2.2.4-reference/SAXresult
Common subdirectories: libxml2-2.2.4/doc and libxml2-2.2.4-reference/doc
Common subdirectories: libxml2-2.2.4/example and libxml2-2.2.4-reference/example
Only in libxml2-2.2.4: libxml
Common subdirectories: libxml2-2.2.4/result and libxml2-2.2.4-reference/result
Common subdirectories: libxml2-2.2.4/test and libxml2-2.2.4-reference/test
Only in libxml2-2.2.4: win32config.h
[Note: this is out of date]
diff libxml2-2.2.4/xmlversion.h libxml2-2.2.4-reference/xmlversion.h
38c38
< #if 0

View File

@ -1,166 +1,169 @@
# Microsoft Developer Studio Project File - Name="libxml2" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=libxml2 - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libxml2.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libxml2.mak" CFG="libxml2 - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libxml2 - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "libxml2 - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "libxml2 - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
F90=df.exe
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "libxml2 - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
F90=df.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "libxml2 - Win32 Release"
# Name "libxml2 - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\debugXML.c
# End Source File
# Begin Source File
SOURCE=..\..\encoding.c
# End Source File
# Begin Source File
SOURCE=..\..\entities.c
# End Source File
# Begin Source File
SOURCE=..\..\error.c
# End Source File
# Begin Source File
SOURCE=..\..\HTMLparser.c
# End Source File
# Begin Source File
SOURCE=..\..\HTMLtree.c
# End Source File
# Begin Source File
SOURCE=..\..\nanoftp.c
# End Source File
# Begin Source File
SOURCE=..\..\nanohttp.c
# End Source File
# Begin Source File
SOURCE=..\..\parser.c
# End Source File
# Begin Source File
SOURCE=..\..\parserInternals.c
# End Source File
# Begin Source File
SOURCE=..\..\SAX.c
# End Source File
# Begin Source File
SOURCE=..\..\tree.c
# End Source File
# Begin Source File
SOURCE=..\..\uri.c
# End Source File
# Begin Source File
SOURCE=..\..\valid.c
# End Source File
# Begin Source File
SOURCE=..\..\xlink.c
# End Source File
# Begin Source File
SOURCE=..\..\xmlIO.c
# End Source File
# Begin Source File
SOURCE=..\..\xmlmemory.c
# End Source File
# Begin Source File
SOURCE=..\..\xpath.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project
# Microsoft Developer Studio Project File - Name="libxml2" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=libxml2 - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libxml2.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libxml2.mak" CFG="libxml2 - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libxml2 - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "libxml2 - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
F90=df.exe
RSC=rc.exe
!IF "$(CFG)" == "libxml2 - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE F90 /include:"Release/"
# ADD F90 /include:"Release/"
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "libxml2 - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE F90 /include:"Debug/"
# ADD F90 /include:"Debug/"
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "libxml2 - Win32 Release"
# Name "libxml2 - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\debugXML.c
# End Source File
# Begin Source File
SOURCE=..\..\encoding.c
# End Source File
# Begin Source File
SOURCE=..\..\entities.c
# End Source File
# Begin Source File
SOURCE=..\..\error.c
# End Source File
# Begin Source File
SOURCE=..\..\HTMLparser.c
# End Source File
# Begin Source File
SOURCE=..\..\HTMLtree.c
# End Source File
# Begin Source File
SOURCE=..\..\nanoftp.c
# End Source File
# Begin Source File
SOURCE=..\..\nanohttp.c
# End Source File
# Begin Source File
SOURCE=..\..\parser.c
# End Source File
# Begin Source File
SOURCE=..\..\parserInternals.c
# End Source File
# Begin Source File
SOURCE=..\..\SAX.c
# End Source File
# Begin Source File
SOURCE=..\..\tree.c
# End Source File
# Begin Source File
SOURCE=..\..\uri.c
# End Source File
# Begin Source File
SOURCE=..\..\valid.c
# End Source File
# Begin Source File
SOURCE=..\..\xlink.c
# End Source File
# Begin Source File
SOURCE=..\..\xmlIO.c
# End Source File
# Begin Source File
SOURCE=..\..\xmlmemory.c
# End Source File
# Begin Source File
SOURCE=..\..\xpath.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project