module XsltProc where import HdomParser import XPath import XsltFunctions import XsltDataTypes import XsltProcTemplate import XsltProcTopLevel -- ----------------------------------------------------------------------------- -- for debugging: {- xslProcessStylesheet :: XmlTrees -> XmlTrees -> (XsltStat, XsltEnv, XsltResult) xslProcessStylesheet xmlFile xslFile = (stat, env, processTemplElems env stat res) -} xslProcessStylesheet :: XmlTrees -> XmlTrees -> XsltResult xslProcessStylesheet xmlFile xslFile = processTemplElems env stat res where -- remove whitespaces in xsl file cXslFile = removeWS stripAll [mkNSName "xsl" "text"] False xslFile xsltEnv = initEnv { sourceNavTree = head $ getNavTree "/" $$ xmlFile ,xslNamespaces = map localPartOf (hasPrefix "xmlns" $$ (getAttrl $ head $ xslFile)) } xsltStat = initStatus { currNode = head $ getNavTree "/" $$ xmlFile ,currNodeList = getNavTree "/" $$ xmlFile ,ruleBody = head $ getNavTree "/" $$ cXslFile } -- read strip-space, preserve-space, match-, und name-rules (fEnv, fRes) = foldl (collectFirstData xmlFile cXslFile xsltStat) (xsltEnv,emptyResult) ["strip-space", "preserve-space", "template"] -- remove whitespaces in xml file cXmlFile = removeWS preservAll (snd $ unzip $ stripSpace fEnv) False xmlFile -- transform xml file in naviagable tree xmlElems = getNavTree "/" $$ cXmlFile stat = initStatus { currNode = head xmlElems ,currNodeList = xmlElems ,currRuleNode = getMRuleNavTree $ findRuleForRoot (dataNT $ head xmlElems) $ matchRules fEnv ,ruleBody = (ruleBody xsltStat) } (env, res) = processTLElems "" fEnv {sourceNavTree = head $ getNavTree "/" $$ cXmlFile} fRes cXmlFile cXslFile stat collectFirstData :: XmlTrees -> XmlTrees -> XsltStat -> (XsltEnv, XsltResult) -> String -> (XsltEnv, XsltResult) collectFirstData xmlTree xslTree st (e, r) tagName = processTLElems tagName e r xmlTree xslTree st