;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: xml-utils.lisp,v 1.10 2003/06/07 05:45:14 kevin Exp $
+;;;; $Id: xml-utils.lisp,v 1.11 2003/06/07 22:34:16 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
;;; XML Extraction Functions
-#|
-#+allegro (require :pxml)
-#+allegro
-(defun parse-xml-no-ws (str)
- "Return list structure of XML string with removing whitespace strings"
- (remove-tree-if #'string-ws? (parse-xml str)))
-|#
-
-
-
-(defun find-start-tag (tag taglen xmlstr start-pos end-xmlstr)
- "Searches for the start of a tag in an xmlstring. Returns (VALUES STARTPOS ATTRIBUTE-LIST)"
+(defun find-start-tag (tag taglen xmlstr start end)
+ "Searches for the start of a tag in an xmlstring. Returns STARTPOS ATTRIBUTE-LIST)"
(declare (simple-string tag xmlstr)
- (fixnum taglen start-pos end-xmlstr))
+ (fixnum taglen start end)
+ (optimize (speed 3) (safety 0) (space 0)))
(do* ((search-str (concatenate 'string "<" tag))
- (bracketpos (fast-string-search search-str xmlstr
- (1+ taglen) start-pos end-xmlstr)
- (fast-string-search search-str xmlstr
- (1+ taglen) start-pos end-xmlstr)))
+ (search-len (1+ taglen))
+ (bracketpos (fast-string-search search-str xmlstr search-len start end)
+ (fast-string-search search-str xmlstr search-len start end)))
((null bracketpos) nil)
(let* ((endtag (+ bracketpos 1 taglen))
(char-after-tag (schar xmlstr endtag)))
(char= #\space char-after-tag))
(if (char= #\> char-after-tag)
(return-from find-start-tag (values (1+ endtag) nil))
- (let ((endbrack (position-char #\> xmlstr (1+ endtag) end-xmlstr)))
+ (let ((endbrack (position-char #\> xmlstr (1+ endtag) end)))
(if endbrack
(return-from find-start-tag
(values (1+ endbrack)
(string-to-list-skip-delimiter
(subseq xmlstr endtag endbrack))))
(values nil nil)))))
- (setq start-pos endtag))))
+ (setq start endtag))))
-(defun find-end-tag (tag taglen xmlstr start-pos end-xmlstr)
+(defun find-end-tag (tag taglen xmlstr start end)
(fast-string-search
(concatenate 'string "</" tag ">") xmlstr
- (+ taglen 3) start-pos end-xmlstr))
+ (+ taglen 3) start end))
(defun positions-xml-tag-contents (tag xmlstr &optional (start-xmlstr 0)
(end-xmlstr (length xmlstr)))