Really! This would be so much better with an XSLT used in the IMPORT. :) Is there are reason you aren't using XML import with XSLT? (other than you don't know it - I know a good resource for learning it <smile>).
-- Beverly Voth Tier3 Data & Web Services Group, LLC 606-864-0041 http://www.tier3web.com/xml.htm Web Design & Hosting * Apple: ACN & ADC Certified FileMaker 7 & 9 Developer * FileMaker Business Alliance Coldfusion, Witango, PHP, MS SQL, MySQL, FMP, XML/XSLT, CSS Over 14 years experience integrating databases and the internet! On 06/06/08 2:25 PM, "Andrew Kappy" <[EMAIL PROTECTED]> wrote in whole or in part: > This is a better representation of what I'm trying to accomplish and > what I've tried. > > Whether I use my original calculation (single variable), the two > variable version, or the custom function, I only get exactly as > desired if I put an actual number for the Occurrence in the Position > function. If I use 1 I get "firstpdf", if I use 2, I get "secondpdf". > That works just fine. However, if I try to use the variable, $pdfnum > or $$pdfnum, I get the first instance just fine in $$insert, the rest > return a blank to $$insert, which I'm watching in Data Viewer. > > In the script example below Line #16 (and disabled #17) are the lines > of interest. Line #17 was my last sample of the calculation using > separate variables for the start and end positions. Line #16 is using > the custom function from NRGSoft, which I've named ExtractXML. > > > Here is a snippet of the XML source which is imported into the field: > "BaseImportXML::RAW Text". > ------------------------- > <POD> > <Order> > <Id>24517</Id> > <ProcessedBy>CT</ProcessedBy> > <Quantity>13</Quantity> > <Spoilage>2</Spoilage> > <TotalQuantity>15</TotalQuantity> > <Type>TEST</Type> > <IncludeInserts>True</IncludeInserts> > <BindItems> > <PDF>firstpdf</PDF> > <PDF>secondpdf</PDF> > <Insert>first insert</Insert> > <Insert>second insert</Insert> > <Insert>third insert</Insert> > <Insert>fourth insert</Insert> > <Insert>fifth insert</Insert> > </BindItems> > ----------------------- > > Here is the relevant portion of the script: > > ------------------ > > 1 Go to Layout [ ³BaseImportXML² (BaseImportXML) ] > 2 Perform Find [ Specified Find Requests: Find Records; Criteria: > BaseImportXML::InsertFlag: ³0² ] [ Restore ] > 3 Go to Record/Request/Page [ First ] > 4 Loop > 5 Set Variable [ $$orderid; Value:BaseImportXML::OrderID ] > 6 Set Variable [ $$totalquantity; Value:BaseImportXML::TotalQuantity ] > 7 Set Variable [ $$ordinal; Value:1 ] > 8 Set Variable [ $pdfnum; Value:1 ] > 9 Set Variable [ $pdfnum2; Value:1 ] > 10 Set Variable [ $$insertnum; Value:1 ] > 11 Set Variable [ $$date; Value:BaseImportXML::EntryDate ] > 12 Set Variable [ $$pdfcnt; Value:BaseImportXML::PDFCnt ] > 13 Set Variable [ $$insertcnt; Value:BaseImportXML::InsertCnt ] > 14 #Get PDFs > 15 Loop > 16 Set Variable [ $$insert; Value:ExtractXML ( BaseImportXML::RAW > Text ; "PDF" ; 1 ) ] > 17 // Set Variable [ $$insert; Value:Middle ( BaseImportXML::RAW > Text ; Position (BaseImportXML::RAW Text;"<PDF>";1;$pdfnum)+5; > Position (BaseImportXML::RAW Text;"</PDF>";1;$pdfnum2)-Position > (BaseImportXML::RAW Text;"<PDF>";1;$pdfnum)-5) ] > 18 Go to Layout [ ³Inserts² (Inserts) ] > 19 New Record/Request > 20 Set Field [ Inserts::OrderID; $$orderid ] > 21 Set Field [ Inserts::Insert; $$insert ] > 22 Set Field [ Inserts::Ordinal; $$ordinal ] > 23 Set Field [ Inserts::Type; "PDF" ] > 24 Set Field [ Inserts::DateStamp; $$date ] > 25 Set Field [ Inserts::PageCount; 4 ] > 26 Set Variable [ $pdfnum; Value:$pdfnum+1 ] > 27 Set Variable [ $pdfnum2; Value:$pdfnum2+1 ] > 28 Set Variable [ $$ordinal; Value:$$ordinal+1 ] > 29 Exit Loop If [ $$pdfnum>$$pdfcnt ] > 30 End Loop > --------------------- > > > > > > On Jun 6, 2008, at 12:21 PM, Ross Dickson wrote: > >> Andrew, >> >> Your calculation will give the following results: >> $num = 1 >> Position(Fieldname;"tag";1;1)+3 = 4 >> Position(Fieldname;"tag2";1;1) = 8 >> Result = Middle(Fieldname;4;4) = WORD >> >> $num = 2 >> Position(Fieldname;"tag";1;2)+3 = 11 >> Position(Fieldname;"tag2";1;2) = 21 >> Result = Middle(Fieldname;11;10) = ¶tagWORD2t >> >> $num = 3 >> Position(Fieldname;"tag";1;3)+3 = 16 >> Position(Fieldname;"tag2";1;3) = 34 >> Result = Middle(Fieldname;13;18) = WORD2tag2¶tagWORD3 >> >> Clearly not what you expected. >> >> I would break each Set Field [WORD, WORD2, WORD3] script step into >> two, one to isolate the line containing the word and the >> surrounding tags, and the second to isolate the word. Once they are >> working you can merge them together, if you wish. >> >> So (FN==Fieldname), >> >> WORD = Middle("¶"&FN&"¶";Position(FN;"¶";1;$num)+1; >> Position(FN;"¶";1;1+$num)- Position(FN;"¶";1;$num)-1) >> WORD = Middle(WORD; 4;Position(WORD;"tag2";1;1)-4) >> >> Ross >>
