This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new ef1f284eb38 NIFI-6532 Added documentation to TransformXml describing 
dynamic properties in stylesheets (#10999)
ef1f284eb38 is described below

commit ef1f284eb38007cc3d663f6e548a2365eefafd2e
Author: dan-s1 <[email protected]>
AuthorDate: Fri Mar 13 16:46:45 2026 -0400

    NIFI-6532 Added documentation to TransformXml describing dynamic properties 
in stylesheets (#10999)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../additionalDetails.md                           | 199 +++++++++++++++++++++
 1 file changed, 199 insertions(+)

diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.TransformXml/additionalDetails.md
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.TransformXml/additionalDetails.md
new file mode 100644
index 00000000000..b289e0dd31e
--- /dev/null
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.TransformXml/additionalDetails.md
@@ -0,0 +1,199 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+# TransformXml
+
+## XSLT Transform with Parameters
+
+XSLT parameters are placeholders within an XSLT stylesheet that allow external 
values
+to be passed into the transformation process at runtime.
+Parameters are accessible within a stylesheet as normal variables, using the 
```$name``` syntax,
+provided they are declared using a top-level ```xsl:param``` element.
+If there is no such declaration, the supplied parameter value is silently 
ignored.
+
+### XSLT with Parameter Defined
+Consider the following XML
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<data>
+    <item>Some data</item>
+</data>
+```
+and XSLT stylesheet
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+    <xsl:param name="customParam" select="'From XSLT'"/>
+    <xsl:template match="/">
+        <root>
+            <message>
+                Value Selected: <xsl:value-of select="$customParam"/>
+            </message>
+        </root>
+    </xsl:template>
+</xsl:stylesheet>
+```
+If the following parameter name ```customParam``` and parameter value ```From 
NIFI``` pair are added 
+as a dynamic property, then the output would be
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+    <message>
+        Value Selected: From NIFI</message>
+</root>
+```
+Note the  value of the ```customParam``` parameter became ```From NIFI``` even 
though
+the declared ```xsl:param``` element had a default value of ```From XSLT```.
+
+### XSLT without Parameter Defined 
+If the XSLT stylesheet does not have a top-level ```xsl:param``` element 
declared
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+    <xsl:template match="/">
+        <root>
+            <message>
+                Value Selected:
+            </message>
+        </root>
+    </xsl:template>
+</xsl:stylesheet>
+```
+even if the following parameter name ```customParam``` and parameter value 
```From NIFI``` pair
+are added as a dynamic property, they are ignored and the output would be
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <message>
+  Value Selected:
+ </message>
+</root>
+```
+In a case where the parameter is not declared in a ```xsl:param``` element, 
but attempted to be used in an XSLT stylesheet,
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+    <xsl:template match="/">
+        <root>
+            <message>
+                Value Selected: <xsl:value-of select="$customParam"/>
+            </message>
+        </root>
+    </xsl:template>
+</xsl:stylesheet>
+```
+even if the following parameter name ```customParam``` and parameter value 
```From NIFI``` pair are added as a dynamic property,
+the transform will fail with an error message containing text ```Variable 
$customParam has not been declared```.
+
+### XSLT Parameter Defined with Required Type
+Starting in XSLT 2.0, an ```as``` attribute was added to parameters allowing 
for
+specifying the type of parameter. The following are some of the more common 
types supported and what
+valid values to use for each:
+
+| Type Name         | Type Value                                               
                                                                |
+|:------------------|:-------------------------------------------------------------------------------------------------------------------------|
+| ```xs:string```   | Any string value.                                        
                                                                |
+ | ```xs:boolean```  | A lowercase value of true or false.                     
                                                                 |
+| ```xs:integer```  | A signed integer value.                                  
                                                                |
+| ```xs:float```    | A 32-bit IEEE single-precision floating-point.           
                                                                |
+| ```xs:double```   | A 64-bit IEEE single-precision floating-point.           
                                                                |
+| ```xs:date```     | A date in ISO 8601 format YYYY-MM-DD                     
                                                                |
+| ```xs:dateTime``` | A date time in ISO 8601 format: YYYY-MM-DDThh:mm:ss with 
optional uses of Z to represent UTC or an offset (e.g. -05:00). |
+| ```xs:time```     | A time in format HH:mm:ss or HH:mm:ss.SSS with optional 
uses of Z to represent UTC or an offset (e.g. -05:00).           |
+| ```xs:anyURI```   | A valid URI.                                             
                                                                | 
+
+
+The following XSLT stylesheet demonstrates the use of specifying types in an 
XSLT
+and populating their values with dynamic properties.
+
+Consider the following XSLT stylesheet
+```xml
+<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+    <xsl:param name="stringParam" as="xs:string" select="'From XSLT'"/>
+    <xsl:param name="integerParam" as="xs:integer" select="0"/>
+    <xsl:param name="floatParam" as="xs:float" select="0.0"/>
+    <xsl:param name="doubleParam" as="xs:double" select="0.0"/>
+    <xsl:param name="booleanParam" as="xs:boolean" select="false"/>
+    <xsl:param name="dateParam" as="xs:date" select="xs:date('1970-01-01')"/>
+    <xsl:param name="dateTimeParam" as="xs:dateTime" 
select="xs:dateTime('1970-01-01T00:00:00')"/>
+    <xsl:param name="timeParam" as="xs:time" select="current-time()"/>
+    <xsl:param name="utcTimeParam" as="xs:time" select="current-time()"/>
+    <xsl:param name="offsetTimeParam" as="xs:time" select="current-time()"/>
+    <xsl:param name="uriParam" as="xs:anyURI"/>
+    <xsl:template match="/">
+        <report>
+            <message>Param of type xs:string value is <xsl:value-of 
select="$stringParam"/></message>
+            <message>Param of type xs:integer value is <xsl:value-of 
select="$integerParam"/></message>
+            <message>Param of type xs:float value is <xsl:value-of 
select="$floatParam"/></message>
+            <message>Param of type xs:double value is <xsl:value-of 
select="$doubleParam"/></message>
+            <message>Param of type xs:boolean value is <xsl:value-of 
select="$booleanParam"/></message>
+            <message>Param of type xs:date value is <xsl:value-of 
select="$dateParam"/></message>
+            <message>Param of type xs:dateTime value is <xsl:value-of 
select="$dateTimeParam"/></message>
+            <message>Param of type xs:time value is <xsl:value-of 
select="$timeParam"/></message>
+            <message>Param of type xs:time UTC value is <xsl:value-of 
select="$utcTimeParam"/></message>
+            <message>Param of type xs:time offset value is <xsl:value-of 
select="$offsetTimeParam"/></message>
+            <message>Param of type xs:anyURI <xsl:value-of 
select="$uriParam"/></message>
+        </report>
+    </xsl:template>
+</xsl:stylesheet>
+```
+and the use of the XML from before
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<data>
+    <item>Some data</item>
+</data>
+```
+
+If the following parameter name and parameter value pairs are added as dynamic 
properties
+
+| Parameter Name  | Parameter Value       |
+|:----------------|:----------------------|
+| stringParam     | From NIFI             |
+| integerParam    | 100                   |
+| floatParam      | 123.456               |
+| doubleParam     | 12.78e-2              |
+| booleanParam    | true                  |
+| dateParam       | 2026-01-01            |
+| dateTimeParam   | 2026-01-01T00:00:00   |
+| timeParam       | 12:34:56.789          |
+| utcTimeParam    | 12:34:56Z             |
+| offsetTimeParam | 12:34:56-05:00        |
+| uriParam        | http://from-nifi.com  |
+
+
+then the resulting XML will be
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<report xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+    <message>Param of type xs:string value is From NIFI</message>
+    <message>Param of type xs:integer value is 100</message>
+    <message>Param of type xs:float value is 123.456</message>
+    <message>Param of type xs:double value is 0.1278</message>
+    <message>Param of type xs:boolean value is true</message>
+    <message>Param of type xs:date value is 2026-01-01</message>
+    <message>Param of type xs:dateTime value is 2026-01-01T00:00:00</message>
+    <message>Param of type xs:time value is 12:34:56.789</message>
+    <message>Param of type xs:time UTC value is 12:34:56Z</message>
+    <message>Param of type xs:time offset value is 12:34:56-05:00</message>
+    <message>Param of type xs:anyURI http://from-nifi.com</message>
+</report>
+```
+Please note the "static" attribute added to the ```xsl:param``` element in 3.0
+does not work with the dynamic properties in NIFI because as implied, static 
means 
+a parameter value must be known at compile time of the XSLT while the dynamic
+properties are supplied at run time of the actual transform.
\ No newline at end of file

Reply via email to