[Home] [By Thread] [By Date] [Recent Entries]
I'm trying to run a couple of stylesheets directly from Python. In one
case the stylesheet is meant to send the output to std out and the other
has all the useful output being created/redirected with
result-documents. I'm only interested in those result files and nothing
going to std out.
It seems that when called from Python it is detecting there is output and errors out saying I didn't provide an output_file value. When I provide an output_file it works and the content is empty. Is there an easy setting in the stylesheet that I could say - ignore all output? Seems like it could be logically added to the <xsl:output> statement. Knowing that doesn't work, I dug into the stylesheet a little more and I'm not sure where the leak is. Here is my Python function from saxonche import * def run_saxon_py(input_file, xslt_file, output_file=None, TRYREQUEST=None, DEBUG=None): time_to_wait = 10 time_counter = 0 while not os.path.exists(input_file): time.sleep(2) time_counter += 2 print(f"WARNING: Waiting for \"{input_file}\" to exist to apply \"{xslt_file}\".") if time_counter > time_to_wait:break try: with PySaxonProcessor(license=False) as proc: xsltproc = proc.new_xslt30_processor() executable = xsltproc.compile_stylesheet(stylesheet_file=xslt_file) if DEBUG == 'yes': executable.set_parameter('DEBUG', proc.make_string_value('yes')) if TRYREQUEST == 'yes': executable.set_parameter('P1_CONTENT', proc.make_string_value('yes')) if output_file == None: print(f"NOW") messages = executable.transform_to_value(source_file=input_file) print(messages) else: # Perform the transformation and write the output directly to a file print(f"HERE") result_file = xsltproc.transform_to_file( source_file=input_file, stylesheet_file=xslt_file, output_file=output_file ) # print(f"Transformation complete. Output saved to: {result_file}") except Exception as e: print(f"ERROR: Unable to apply \"{xslt_file}\" to \"{input_file}\": \n{e}\n") It gets called like this for the one that fails run_saxon_py(collection_build_xml, os.path.join(SCRIPT_DIR, navadoc_xsl), TRYREQUEST=TRYREQUEST) In the navdoc_xsl I start with this: <xsl:template match="/" priority="10"> <xsl:variable name="COLLECTION-TITLE" select="normalize-space(/build-map/item[@type='startpage']/title)"/> <xsl:variable name="START-PAGE" select="ping:modularize-path(/build-map/item[@type='startpage']/filepath/relative)"/>
<xsl:call-template name="build-playbook-yml"> <xsl:with-param name="START-PAGE" select="$START-PAGE"/> <xsl:with-param name="COLLECTION-TITLE" select="$COLLECTION-TITLE"/> </xsl:call-template> <xsl:result-document method="text" href="{concat($srcPath, $MODULES_LOC, '/ROOT/nav.adoc')}"> <xsl:apply-templates /> </xsl:result-document> <!-- Create the Postman partial files --> <xsl:for-each select="//item/partial"> <xsl:apply-templates select="." mode="partials"> <xsl:with-param name="topicid" select="parent::item/@id"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> The csll-templates do some processing but each of them writes output to different result-documents. If I comment out the for-each in this template there is no error. So looking at this template that is called I have this: <xsl:template match="partial" mode="partials"> <xsl:param name="topicid" /> <xsl:result-document href="{concat($PARTIALS, $topicid, '_EP.adoc')}"> <xsl:call-template name="endpoint"> <xsl:with-param name="METHOD" select="preceding-sibling::request-type"></xsl:with-param> </xsl:call-template> </xsl:result-document> </xsl:template> And the endpoint template <xsl:template name="endpoint"> <xsl:param name="METHOD"/> <xsl:text>[.api_endpoint]</xsl:text><xsl:value-of select="$RETURN"/> <xsl:text>[source,subs="+attributes,+macros"]</xsl:text><xsl:value-of select="$RETURN"/> <xsl:text>--</xsl:text><xsl:value-of select="$RETURN"/> <xsl:value-of select="$METHOD"/><xsl:text> </xsl:text> <xsl:value-of select="endpoint"/><xsl:value-of select="$RETURN"/> <xsl:text>--</xsl:text><xsl:value-of select="$RETURN"/> <xsl:value-of select="$RETURN"/> </xsl:template> I'm not seeing where the output is escaping. So I tried getting rid of the call template like this: <xsl:result-document href="{concat($PARTIALS, $topicid, '_EP.adoc')}"> <!-- <xsl:call-template name="endpoint"> <xsl:with-param name="METHOD" select="preceding-sibling::request-type"></xsl:with-param> </xsl:call-template>--> <xsl:variable name="METHOD" select="preceding-sibling::request-type"/> <xsl:text>[.api_endpoint]</xsl:text><xsl:value-of select="$RETURN"/> <xsl:text>[source,subs="+attributes,+macros"]</xsl:text><xsl:value-of select="$RETURN"/> <xsl:text>--</xsl:text><xsl:value-of select="$RETURN"/> <xsl:value-of select="$METHOD"/><xsl:text> </xsl:text> <xsl:value-of select="endpoint"/><xsl:value-of select="$RETURN"/> <xsl:text>--</xsl:text><xsl:value-of select="$RETURN"/> <xsl:value-of select="$RETURN"/> </xsl:result-document> I still get this error that points to the start of the result-document element: NOW Error at xsl:result-document on line 68 column 73 of build-xmlTOpartials.xsl: SXRD0002 The system identifier of the principal output file is unknown In template rule with match="partial" on line 38 of build-xmlTOpartials.xsl invoked by xsl:apply-templates at file:///Users/danvint/pubsrc/_src-data-files/API-markdown-adoc/_build-pipeline/_scripts/conversion/build-xmlTOnavadoc.xsl#59 ERROR: Unable to apply "/Users/danvint/pubsrc/_src-data-files/API-markdown-adoc/_build-pipeline/_scripts/conversion/build-xmlTOnavadoc.xsl" to "pingone-for-developers-getting-started-build-map.xml": The system identifier of the principal output file is unknown. Line number: -1 What am I missing? ..dan
|

Cart



