#DEFINE hExStart [<text:span text:style-name="T] #DEFINE hExEnd [</text:span>] #DEFINE hBox1 [<draw:frame draw:style-name="gr] #DEFINE hBox2 [/draw:frame>] DO setkey CREATE CURSOR crsDx (x N(8,3), Y N(8,3), TEXT VARCHAR(120)) lcText=FILETOSTR("\very long path\content.xml") lastx=0 lasty=0 c="" nBoxes=OCCURS(hBox1, lcText) FOR i=1 TO nBoxes lcBox=STREXTRACT(lcText, hBox1, hBox2,i,5) newx=VAL(STREXTRACT(lcBox, [svg:x="], "cm")) newy=VAL(STREXTRACT(lcBox, [svg:y="], "cm")) FOR j=1 TO OCCURS(hExStart, lcBox) c=STREXTRACT(lcBox, hExStart, hExEnd, j, 5) c=unTag(c) c=STRTRAN(c, "<", "<") c=STRTRAN(c, ">", ">") c=STRCONV(STRCONV(c,11),2) IF NOT EMPTY(c) o=NEWOBJECT("empty") ADDPROPERTY(o, "x", newx) ADDPROPERTY(o, "y", newy) ADDPROPERTY(o, "text", c) INSERT INTO crsDx FROM NAME o IF RECNO()%255=0 WAIT WINDOW TEXTMERGE([<<i>>/<<nBoxes>>]) NOWAIT ENDIF ENDIF ENDFOR ENDFOR * now output c="" SCAN FOR y<27 c = c + text+0h0d0a ENDSCAN STRTOFILE(c, "mypath\mydoc.txt") FUNCTION unTag(tcString) *[2010/06/24 17:44:25] ndragan - strip html, return text. LOCAL c, lcTag #DEFINE hLT "<" #DEFINE hGT ">" c=tcString DO WHILE hLT$c lcTag=STREXTRACT(c, hLT, hGT,1,4) c=STRTRAN(c, lcTag, "") ENDDO RETURN cNow the numbers like 27 (for y) and the specific tags I was looking for may look quite different in your case... but this worked well enough.