diff options
Diffstat (limited to 'testautomation/global/tools/includes/optional/t_xml1.inc')
-rw-r--r-- | testautomation/global/tools/includes/optional/t_xml1.inc | 652 |
1 files changed, 652 insertions, 0 deletions
diff --git a/testautomation/global/tools/includes/optional/t_xml1.inc b/testautomation/global/tools/includes/optional/t_xml1.inc new file mode 100644 index 000000000000..5afd05cbb22f --- /dev/null +++ b/testautomation/global/tools/includes/optional/t_xml1.inc @@ -0,0 +1,652 @@ +'encoding UTF-8 Do not remove or change this line! +'************************************************************************** +' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +' +' Copyright 2000, 2010 Oracle and/or its affiliates. +' +' OpenOffice.org - a multi-platform office productivity suite +' +' This file is part of OpenOffice.org. +' +' OpenOffice.org is free software: you can redistribute it and/or modify +' it under the terms of the GNU Lesser General Public License version 3 +' only, as published by the Free Software Foundation. +' +' OpenOffice.org is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU Lesser General Public License version 3 for more details +' (a copy is included in the LICENSE file that accompanied this code). +' +' You should have received a copy of the GNU Lesser General Public License +' version 3 along with OpenOffice.org. If not, see +' <http://www.openoffice.org/license.html> +' for a copy of the LGPLv3 License. +' +'/************************************************************************ +'* +'* Owner : helge.delfs@oracle.com +'* +'* short description : simple XML-Parser for XML-Files from Registration-Database and Routines to work with SAX-Parser in Testtool +'* +'*********************************************************************************** +' #1 hXMLGotoElement +' #1 hXMLGetFirstCharsForElement +' #1 ExtractSections +' #1 GetXMLValue +' #1 GetXMLTagValue +' #1 GetXMLValueList +' #1 GetXMLValueType +' #1 GetXMLValueLine +' #1 GetXMLValueGlobal +' #1 GetExtractXMLValue +' #1 GetExtractXMLValueList +' #1 GetExtractXMLValueFromList +' #1 hXMLSeekElementInTree +'\********************************************************************************** + +function hXMLGotoElement ( sElementLine as String, optional bSilent as boolean) as boolean +'/// uses SAX Interface in testtool ///' +'///hXMLGotoElement ( sElementLine as String ) +'///+Input : sElementLine => the tree in DOM as one string seperated with ';' +'///+ - - - - - to be more exact, the Attribute Values to 'oor:name' ///' +'///+ - - - -: bSilent => print warnings? ///' +'///+Output : -- +'///+Return : was the Element found? +'///- you can jump directly to the correct entry in the DOM-tree + + Dim sList (50) as String + Dim i as Integer + Dim x as Integer + Dim y as Integer + Dim n as Integer + dim iMax as integer + dim bFound as boolean + dim bFoundCollect as boolean + dim iAttrCount as integer + dim bLocalSilent as boolean + + if (isMissing(bSilent)) then + bLocalSilent = FALSE + else + bLocalSilent = bSilent + endif + + bFoundCollect = TRUE + ExtractSections ( sElementLine, sList () ) + + for i=1 to ListCount ( sList () ) ' for every Section + iMax = SAXGetChildCount() + x = 0 + bFound = FALSE +' ' ------------ debug start ---------------------- +' for n = 1 to iMax +' SAXSeekElement (n) +' Printlog " " + i + ":(" + n + "/" + iMax + "): '" + SAXGetElementName +' iAttrCount = SAXGetAttributeCount +' for y = 1 to iAttrCount +' Printlog " " + i + ":" + n + ":(" + y + "/" + iAttrCount + "): '"+SAXGetAttributeName (y) +"' : '"+SAXGetAttributeValue (y) +"' " +' next y +' SAXSeekElement (0) +' next n +' ' ------------- debug end ----------------------- + while ((bFound = FALSE) AND (x < iMax)) ' compare the VALUE for the ATTRIBUTE 'oor:name' with the wanted ITEM + inc(x) ' do it until it fits; else print warnlog + SAXSeekElement (x) + if (SAXGetAttributeValue ("oor:name") <> sList (i)) then + SAXSeekElement (0) + else + bFound = TRUE + endif + wend + if ((bFound = FALSE) AND (bSilent = FALSE)) then + Warnlog "hXMLGotoElement::ERROR! Element " + i + ": '" + sList (i) + "' not found :-(" + endif + bFoundCollect = bFound AND bFoundCollect + next i + hXMLGotoElement = bFoundCollect +end function +' +'------------------------------------------------------------------------------- +' +function hXMLGetFirstCharsForElement ( sElementLine as String, optional sXMLFile as String, optional bClose as Boolean ) as String +'/// uses SAX Interface in testtool ///' + Dim bCloseLocal as Boolean +'///hXMLGetFirstCharsForElement ( sElementLine as String, optional sXMLFile as String, optional bClose as Boolean ) as String +'///+Input : sElementLine => the tree in DOM as one string seperated with ';' +'///+- sXMLFile => ( optional ) if you want to open the DOM for a file you can set here the filename +'///+- bClose => ( optional ) if you want to close the DOM after getting the char, you can set this to TRUE ( default is FALSE ) +'///+Output : -- +'///+Return : the string for the element +'///- you can jump directly to the correct entry in the DOM-tree and get the char for that entry +'///- the DOM is closed after this return + + if IsMissing( sXMLFile ) = FALSE then + SAXReadFile ( sXMLFile ) + end if + + if IsMissing( bClose ) = TRUE then + bCloseLocal = FALSE + else + bCloseLocal = bClose + end if + + hXMLGotoElement ( sElementLine ) + SAXSeekElement ( 1 ) + if SAXGetNodeType = NodeTypeCharacter then + hXMLGetFirstCharsForElement = SAXGetChars + else + Warnlog "hXMLGetFirstCharsForElement : the element " + sElementLine + " has no chars" + hXMLGetFirstCharsForElement = "" + end if + + if bCloseLocal = TRUE then SAXRelease +end function +' +'------------------------------------------------------------------------------- +' +function ExtractSections ( sInput as String, lsXMLsections() as String ) as Integer +'///Input : - sInput => a full section seperated with ';' +'///+- lsXMLsections => an empty list +'///+Output : the list ( lxXMLsections ) with seperated sectionnames +'///+Return : number of sections + + Dim ii, iLen as Integer + Dim iList ( 50 ) as String + Dim bFirstEntry as Boolean + Dim Dummy as String + dim sTemp as string + + lsXMLsections(0) = 0 + iList (0) = 0 + iLen = len ( sInput ) + bFirstEntry = TRUE + + for ii=1 to ( iLen ) + Dummy = mid ( sInput, ii, 1 ) + if ( mid ( sInput, ii, 1 ) ) = ";" then ListAppend ( iList(), Str ( ii ) ) + next ii + + for ii=1 to ( ListCount ( iList () ) ) + if bFirstEntry = TRUE then + ListAppend ( lsXMLsections(), Left ( sInput, Val(iList(1))-1 ) ) + bFirstEntry = FALSE + end if + Dummy = mid ( sInput, Val(iList(ii))+1, Val(iList(ii+1))-Val(iList(ii))-1 ) + ListAppend ( lsXMLsections(), Dummy ) + next ii + + sTemp = ListCount ( lsXMLsections() ) + ExtractSections = sTemp + if (sTemp = 0) then + ListAppend (lsXMLsections(), sInput) + ExtractSections = 1 + end if +end function +' +'------------------------------------------------------------------------------- +' +function GetXMLValue ( sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String, optional bSilent as Boolean ) as String +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item /// +'///+ Output : - - /// +'///+ Return : - the value /// +'/// wraper for GetXMLValueGlobal ///' + if IsMIssing ( bSilent ) <> TRUE then + GetXMLValue = GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection, , , , bSilent ) + else + GetXMLValue = GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection, , , , ) + end if +end function + +function GetXMLTagValue ( sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String, sValue as String ) as String +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item /// +'///+ Output : - - /// +'///+ Return : - the value /// +'/// wraper for GetXMLValueGlobal ///' + GetXMLTagValue = GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection, ,sValue , , ) +end function + +function GetXMLValueList ( lsXMLValue() as String, sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String ) as String +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item /// +'///+ Output : - - /// +'///+ Return : - the value /// +'/// wraper for GetXMLValueGlobal ///' + Dim sLine, sLine1 as String + Dim i, iCounter as Integer + + sLine = GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection, ,"cfg:value" , TRUE, ) + if sLine = "" then + GetXMLValueList = "" + else + GetXMLValueList = GetExtractXMLValueList ( lsXMLValue(), sLine, , ) + end if +end function +' +'------------------------------------------------------------------------------- +' +function GetXMLValueType ( sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String, optional sType ) as String +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item /// +'///+ Output : - - /// +'///+ Return : - the value /// +'/// wraper for GetXMLValueGlobal ///' + Dim sDummy as String + if IsMissing ( sType ) = TRUE then + sDummy = "type" + else + sDummy = sType + end if + + GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection, sDummy, , , ) + GetXMLValueType = sDummy +end function + +function GetXMLValueLine ( sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String ) as String +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item /// +'///+ Output : - - /// +'///+ Return : - the value /// +'/// wraper for GetXMLValueGlobal ///' + GetXMLValueLine = GetXMLValueGlobal ( sXMLfile, sXMLsectionMaster, sXMLsection,,, TRUE, ) +end function +' +'------------------------------------------------------------------------------- +' +function GetXMLValueGlobal ( sXMLfile as String, sXMLsectionMaster as String, sXMLsection as String, optional sXMLType, optional sXMLTag, optional biWholeLine, optional bSil as Boolean ) as String +'/// uses no SAX Parser : just text search in the file ///' +'/// You can get the value of an item in a XML-file. The value of the item must be set between <value> and <value/>. /// +'///+ The item can be written in one line or in more lines. /// +'/// Input : - sXMLfile => Filename with full path /// +'///+ - - - - - sXMLsectionMaster => the master-section ( mostly in StarOffice the filename without extension ) /// +'///+ - - - - - sXMLsection => full way to the item ///' +'///+ - - - - - optional sXMLType => if you want to get the XML-Type this variable must be set ///' +'///+ - - - - - optional sXMLTag => if sXMLTag isn't set, "value" is the tag, else you must set the tag here ///' +'///+ Output : - optional sXMLType => if sXMLType is set, it will be returned the Type of the value as string ///' +'///+ Return : - the value of the searched item ///' +' Dim FileNum as Integer + Dim Pos, iSec, i, j, iDum as Integer + Dim MasterSecOK, MasterSecEnd, SecOK, SecEnd, bThrough, bWholeLine as Boolean + Dim xmlZeile, xmlZeile2, sVariable, sDummy, sDummy2 as String + Dim lsSecList ( 1000 ) as String + Dim lsInterim ( 1000 ) as String + Dim textin as object, sfa as object, xInput as object + Dim bSilent as Boolean + + if ( IsMissing ( bSil ) ) = TRUE then + bSilent = FALSE + else + bSilent = TRUE + end if + + if ( IsMissing ( biWholeLine ) ) = TRUE then + bWholeLine = FALSE + else + bWholeLine = TRUE + end if + + if Dir( sXMLfile ) = "" then + if bSilent = FALSE then Warnlog "GetXMLValueGlobal(...) : " + sXMLfile + " is missing!" + exit function + end if + + MasterSecOK = FALSE : MasterSecEND = FALSE + SecOK=FALSE : SecEND=FALSE + bThrough = FALSE + Pos = 1 + GetXMLValueGlobal = "" + + lsSecList (0) = 0 + lsInterim (0) = 0 + + iSec = ExtractSections ( sXMLsection, lsSecList () ) + sVariable = lsSecList (iSec) + ListDelete ( lsSecList(), iSec ) + iSec = iSec-1 + if iSec = 0 then ListAppend ( lsSecList(), "" ) + + textin = createUnoService( "com.sun.star.io.TextInputStream" ) + textin.setEncoding("utf8") + sfa = createUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + xInput = sfa.openFileRead( sXMLfile ) + textin.setInputStream( xInput ) + + do until textin.isEOF() + xmlZeile = textin.readLine() + + xmlZeile = TrimTab ( Trim ( xmlZeile ) ) + xmlZeile2 = lCASE( xmlZeile ) ' control case-insensitiv + + if MasterSecOK = FALSE then ' master-section ( com.sun.star. ... ) + if xmlZeile2= "<" + lCASE( sXMLsectionMaster ) + ">" OR Instr ( xmlZeile2, "<" + lCASE( sXMLsectionMaster ) + " " ) <> 0 then + MasterSecOK = TRUE + else + if xmlZeile2 = "<" + lCASE( sXMLsectionMaster ) + "/>" then + if bSilent = FALSE then warnlog "GetXMLValueGlobal(...) : '" + sXMLsectionMaster + "' -> master-section has no entries!" + exit do + end if + end if + else + if xmlZeile2= "</" + lCASE( sXMLsectionMaster ) + ">" OR xmlZeile2= "<" + lCASE( sXMLsectionMaster ) + "/>" then + if bSilent = FALSE then warnlog "GetXMLValueGlobal(...) : '" + lsSecList (Pos) + "' -> entry could not be found!" + exit do + end if + + if ( Instr (xmlZeile2, lCASE ( "<" + lsSecList (Pos)) ) <> 0 AND iSec > 0 ) AND Pos < iSec+1 then + iDum = Instr ( lsSecList (Pos), " " ) + if iDum <> 0 then lsSecList(Pos) = Left ( lsSecList(Pos), iDum -1 ) + if xmlZeile2 = "<" + lCASE( lsSecList (Pos) ) + "/>" then + if Pos = iSec then + if bSilent = FALSE then Warnlog "GetXMLValueGlobal(...) : '" + svariable + "' -> entry could not be found" + else + if bSilent = FALSE then Warnlog "GetXMLValueGlobal(...) : '" + lsSecList (Pos) + "' -> entry could not be found" + end if + exit do + else + Pos = Pos + 1 + end if + else + if Pos > iSec then + sDummy2 = Mid ( xmlZeile2, 2, len ( svariable ) + 1 ) + if sDummy2 = lCase ( svariable ) + ">" OR sDummy2 = lCase ( svariable ) + " " OR bThrough = TRUE then + iDum = Instr ( svariable, " " ) ' inserted because an error in GetXMLValueLineExtra 3.11.00 (TZ) + if iDum <> 0 then svariable = Left ( svariable, iDum -1 ) ' inserted because an error in GetXMLValueLineExtra 3.11.00 (TZ) + sDummy = Mid ( xmlZeile2, len ( xmlZeile2 ) - 1 - len ( svariable), len ( svariable)+1 ) + if ( bThrough = FALSE AND ( sDummy = "/" + lCase ( svariable ) OR Right (sDummy, 1 ) = "/" ) ) OR ( bThrough = TRUE AND sDummy = "/" + lCase ( svariable ) ) then + if ListCount ( lsInterim () ) = 0 then + if bWholeLine = TRUE then + GetXMLValueGlobal = xmlZeile + else + if ( IsMissing ( sXMLTag ) ) = TRUE then + if ( IsMissing ( sXMLType ) ) = TRUE then + GetXMLValueGlobal = GetExtractXMLValue ( xmlZeile,, ) + else + GetXMLValueGlobal = GetExtractXMLValue ( xmlZeile, sXMLType, ) + end if + else + if ( IsMissing ( sXMLType ) ) = TRUE then + GetXMLValueGlobal = GetExtractXMLValue ( xmlZeile,, sXMLTag ) + else + GetXMLValueGlobal = GetExtractXMLValue ( xmlZeile, sXMLType, sXMLTag ) + end if + end if + end if + else + ListAppend ( lsInterim (), xmlZeile2 ) + if bWholeLine = TRUE then + for j=1 to ListCount ( lsInterim () ) + GetXMLValueGlobal = GetXMLValueGlobal + lsInterim (j) + next j + else + if ( IsMissing ( sXMLTag ) ) = TRUE then + if ( IsMissing ( sXMLType ) ) = TRUE then + GetXMLValueGlobal = GetExtractXMLValueFromList ( lsInterim (),, ) + else + GetXMLValueGlobal = GetExtractXMLValueFromList ( lsInterim (), sXMLType, ) + end if + else + if ( IsMissing ( sXMLType ) ) = TRUE then + GetXMLValueGlobal = GetExtractXMLValueFromList ( lsInterim (),, sXMLTag ) + else + GetXMLValueGlobal = GetExtractXMLValueFromList ( lsInterim (), sXMLType, sXMLTag ) + end if + end if + end if + end if + bThrough = FALSE + exit do + else + if xmlZeile2 <> "" then + bThrough = TRUE + ListAppend ( lsInterim (), xmlZeile2 ) + end if + end if + end if + end if + end if + end if + loop + + xInput.closeInput '* uno-file-close + + if bSilent = FALSE then + if MasterSecOK = FALSE then warnlog "GetXMLValueGlobal (...) : '" + sXMLsectionMaster + "' -> Master-section was not found!" + end if + wait 1000 +end function +' +'------------------------------------------------------------------------------- +' +function GetExtractXMLValue ( sFullLine as String, optional sXMLType, optional sXMLTag ) as String +'/// Get the value-string, when the text is only in one line. ///' +'/// Input : - sFullLine => the whole line out of XML-File ///' +'/// Output : - optional sXMLType => if sXMLType is set, it will be returned the Type of the value as string ///' +'/// Return : - the text between <value> and <value/> ///' + Dim i, ii, iStart, iEnd as Integer + Dim sInterim, ssTag as String + + if ( IsMissing ( sXMLTag ) ) = TRUE then + ssTag = "value" + else + ssTag = sXMLTag + end if + + sInterim = lCase ( sFullLine ) + + if InStr ( sInterim, "<" + ssTag + "/>" ) <> 0 then + GetExtractXMLValue = "" + else + iStart = InStr ( sInterim, "<" + ssTag + ">" ) + iEnd = InStr ( sInterim, "</" + ssTag + ">" ) + if iStart <> 0 AND iEnd <> 0 then + if iStart + len(ssTag) + 2 = iEnd then + GetExtractXMLValue = "" + else + GetExtractXMLValue = Mid ( sFullLine, iStart + len ( ssTag )+2, iEnd - iStart - len ( ssTag ) - 2 ) + end if + end if + end if + + if ( IsMissing ( sXMLType ) ) = FALSE then + sXMLType = lcase (sXMLType) + ii = InStr ( sInterim, sXMLType + "=" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + + if ii = 0 then + sXMLType = "" + else + for i=ii to len ( sInterim ) - ii + if Mid ( sInterim, i, 1 ) = chr (34) then + iStart=i + i=1000 + end if + next i + for i=(iStart+1) to len ( sInterim ) - (iStart+1) + if Mid ( sInterim, i, 1 ) = chr (34) then + iEnd=i + i=1000 + end if + next i + sXMLType = Mid ( sFullLine, iStart+1, iEnd-iStart-1 ) + end if + end if + +end function +' +'------------------------------------------------------------------------------- +' +function GetExtractXMLValueList ( lsXMLValues (), sFullLine as String, optional sXMLType, optional sXMLTag ) as Integer +'/// Get the value-string, when the text is only in one line ///' +'/// Input : - ///' +'/// Output : - ///' +'/// Return : - ///' + Dim i, ii, iStart, iEnd as Integer + Dim sInterim, ssTag as String + + lsXMLValues(0)=0 + + if ( IsMissing ( sXMLTag ) ) = TRUE then + ssTag = "value" + else + ssTag = sXMLTag + end if + + sInterim = lCase ( sFullLine ) + ii = len( sInterim ) / len ( ssTag ) ' maximal so viele Wiederholungen, wie es sTags gibt + + for i=1 to ii + if InStr ( sInterim, "<" + ssTag + "/>" ) = 0 then + iStart = InStr ( sInterim, "<" + ssTag + ">" ) + iEnd = InStr ( sInterim, "</" + ssTag + ">" ) + if iStart <> 0 AND iEnd <> 0 then + if iStart + len(ssTag) + 2 = iEnd then + ListAppend ( lsXMLValues(), "" ) + sInterim = Mid ( sInterim, iEnd + len (ssTag)+2, len (sInterim) - iEnd - len (ssTag) - 1 - 2 ) + else + ListAppend ( lsXMLValues(), Mid ( sInterim, iStart + len(ssTag)+2, iEnd - iStart - len(ssTag)-2 ) ) + sInterim = Mid ( sInterim, iEnd + len (ssTag), len (sInterim) - iEnd - len (ssTag) - 1 ) + end if + else + i = ii + 1 + end if + end if + next i + GetExtractXMLValueList = ListCount ( lsXMLValues() ) + + if ( IsMissing ( sXMLType ) ) = FALSE then + sXMLType = lcase (sXMLType) + ii = InStr ( sInterim, sXMLType + "=" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + + if ii = 0 then + sXMLType = "" + else + for i=ii to len ( sInterim ) - ii + if Mid ( sInterim, i, 1 ) = chr (34) then + iStart=i + i=1000 + end if + next i + for i=(iStart+1) to len ( sInterim ) - (iStart+1) + if Mid ( sInterim, i, 1 ) = chr (34) then + iEnd=i + i=1000 + end if + next i + sXMLType = Mid ( sFullLine, iStart+1, iEnd-iStart-1 ) + end if + end if + +end function +' +'------------------------------------------------------------------------------- +' +function GetExtractXMLValueFromList ( lsList() as String, optional sXMLType, optional sXMLTag ) as String +'/// Get the value-string, when the text is in a list ( when the item is written in more than one line ). ///' +'/// Input : - lsList() => the list of the whole entry of the xml-item ///' +'/// Output : - optional sXMLType => if sXMLType is set, it will be returned the Type of the value as string ///' +'/// Return : - the text between <value> and <value/> ///' + Dim i, ii, iStart, iEnd as Integer + Dim sInterim, sInterim1, ssTag as String + + if ( IsMissing ( sXMLTag ) ) = TRUE then + ssTag = "value" + else + ssTag = sXMLTag + end if + + for i=1 to ListCount ( lsList() ) + sInterim1 = sInterim1 + lsList(i) + next i + + sInterim = lCase ( sInterim1 ) + + if InStr ( sInterim, "<"+ ssTag +"/>" ) <> 0 then + GetExtractXMLValueFromList = "" + else + iStart = InStr ( sInterim, "<" + ssTag + ">" ) + iEnd = InStr ( sInterim, "</" + ssTag + ">" ) + if iStart <> 0 AND iEnd <> 0 then + if iStart + len(ssTag) + 2 = iEnd then + GetExtractXMLValueFromList = "" + else + GetExtractXMLValueFromList = Mid ( sInterim1, iStart + len ( ssTag )+2, iEnd - iStart - len ( ssTag ) - 2 ) + end if + end if + end if + + if ( IsMissing ( sXMLType ) ) = FALSE then + sXMLType = lcase (sXMLType) + ii = InStr ( sInterim, sXMLType + "=" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + if ii = 0 then ii = InStr ( sInterim, sXMLType + " =" ) + + if ii = 0 then + sXMLType = "" + else + for i=ii to len ( sInterim ) - ii + if Mid ( sInterim, i, 1 ) = chr (34) then + iStart=i + i=1000 + end if + next i + for i=(iStart+1) to len ( sInterim ) - (iStart+1) + if Mid ( sInterim, i, 1 ) = chr (34) then + iEnd=i + i=1000 + end if + next i + sXMLType = Mid ( sInterim1, iStart+1, iEnd-iStart-1 ) + end if + end if +end function +' +'----------------------------------------------------------------------------- +' +function hXMLSeekElementInTree ( sSeekThisNodeXML as STRING ) as BOOLEAN + hXMLSeekElementInTree = FALSE +' Peter Junge: 2005-07-29 +'///<u><b>Recursion to find XML element</b></u>/// +'///Input: 'sSeekThisNodeXML' - XML element to seek, e.g. 'foo:bar'/// +'///(A XML DOM has to be loaded before)/// +'///Seek begins at current XML pointer/// +'///Return: TRUE if element was found, else FALSE/// +'///BEHAVIOUR: XML pointer is set to 'foo:bar' if found, if not XML pointer is reset to initial element/// +'///NOTE: Currently only the first appearence of 'foo:bar' is found./// +'///NOTE: If e.g. the Nth element should be found you have to modify this function/// +'///NOTE: There should be further enhancements possible, e.g. find element with specific attribute/// + dim iIndex as INTEGER + '///<ul><li>Check if current node matches 'sSeekThisNodeXML'</li>/// + if SAXGetElementName() = sSeekThisNodeXML then + '///<li>MATCH: Function returns TRUE</li>/// + hXMLSeekElementInTree = TRUE + else + '///<li>NO MATCH: LOOKUP if current node has elements</li>/// + for iIndex = 1 to SAXGetChildCount() + '///<li>-> (Loop) Set pointer on child</li>/// + SAXSeekElement ( iIndex ) + '///<li>-> Check if child is a XML element</li>/// + if SAXGetNodeType() = 556 then + '///<li>-> RECURSION: function recalls itself for current element</li>/// + if hXMLSeekElementInTree ( sSeekThisNodeXML ) = TRUE then + '///<li>Don't forget to pass back the result TRUE to recursions parent</li>/// + hXMLSeekElementInTree = TRUE + '///<li>Exit loop if found</li>/// + Exit For + endif + endif + '///<li>NO MATCH: Go back to parent in DOM tree</li></ul>/// + SAXSeekElement( 0 ) + next iIndex + endif +end function + |