Add more functions to the XPath builder
Here should go questions about transforming XML with XSLT and FOP.
Add more functions to the XPath builder
Is it possible? For instance, I'd like to ads this one : http://www.xsltfunctions.com/xsl/funct ... match.html or any own function.
I checked out the options of the XPath builder and the documentation: https://www.oxygenxml.com/doc/versions/ ... lbar.html but it only says that if the function is not implemented you get a warning.
best Oleksii
XML Editor 20.1, build 2018122403
I checked out the options of the XPath builder and the documentation: https://www.oxygenxml.com/doc/versions/ ... lbar.html but it only says that if the function is not implemented you get a warning.
best Oleksii
XML Editor 20.1, build 2018122403
Kind regards,
Oleksii Sapov-Erlinger
Oleksii Sapov-Erlinger
-
- Posts: 96
- Joined: Tue Aug 19, 2014 12:04 pm
Re: Add more functions to the XPath builder
Post by Martin Honnen »
If you use XQuery instead of XPath in the builder then you can use and import other XQuery modules with functions I think:
As for pure XPath, with XPath 3 and later (and support for higher-order functions/function variables) you can write code like
I don't know whether the oXygen editor allows you to add/declare functions outside the builder window as long as you use pure XPath.
Code: Select all
import module namespace functx = "http://www.functx.com" at "http://www.xqueryfunctions.com/xq/functx-1.0-doc-2007-01.xq";
functx:substring-before-match('abc-def-ghi', '[dg]')
Code: Select all
let
$substring-before-match :=
function($arg as xs:string? , $regex as xs:string ) as xs:string { tokenize($arg,$regex)[1] }
return $substring-before-match('abc-def-ghi', '[dg]')
Re: Add more functions to the XPath builder
Hi Oleksii,
In addition to what Martin replied, you seem to want to call in the XPath a function implemented in XSLT content. We do not have the APIs available in the Saxon XSLT processor we use for running the XPath to provide for such a feature.
Regards,
Radu
In addition to what Martin replied, you seem to want to call in the XPath a function implemented in XSLT content. We do not have the APIs available in the Saxon XSLT processor we use for running the XPath to provide for such a feature.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 96
- Joined: Tue Aug 19, 2014 12:04 pm
Re: Add more functions to the XPath builder
Post by Martin Honnen »
If you use Saxon EE for XPath (probably requires 9.8 or later) then you could also try to use the function "load-xquery-module":
That is still importing the XQuery library of functx, if you want to use the XSLT library I am not sure there is a direct way in pure XPath, in XQuery you could import or include it and use the "transform" function to run the function:
Tested with Saxon 9.8 and 9.9 for XQuery.
Code: Select all
let $functxNs := 'http://www.functx.com',
$functx := load-xquery-module($functxNs, map { 'location-hints' : 'http://www.xqueryfunctions.com/xq/functx-1.0-doc-2007-01.xq' }),
$substring-before-match := $functx?functions (QName($functxNs, 'substring-before-match'))?2
return $substring-before-match('abc-def-ghi', '[dg]')
Code: Select all
let $functxNs := 'http://www.functx.com',
$functxLoc := 'http://www.xsltfunctions.com/xsl/functx-1.0-doc-2007-01.xsl',
$libPackage := <xsl:package
name="http://example.com/import-functx"
package-version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:functx="http://www.functx.com">
<xsl:expose
component="function"
names="functx:*"
visibility="public"/>
<xsl:import
href="{$functxLoc}"/>
</xsl:package>
return
transform(
map {
'stylesheet-node': $libPackage,
'delivery-format': 'raw',
'initial-function': QName('http://www.functx.com', 'substring-before-match'),
'function-params': ['abc-def-ghi', '[dg]']
})?output
Re: Add more functions to the XPath builder
Hello Martin,
thank you for the examples. I saved the code for the xPath "load-xquery-module" as favorite in the builder, so I can recall it when I need.
Originally, the question appeared when I was writing an XSLT and wanted to use a functx:function and to check in the builder if the concept will work as I expect. Currently, I am not familiar with the differences in this library for XQuery / XPath, but I will consider it when testing.
best Oleksii
thank you for the examples. I saved the code for the xPath "load-xquery-module" as favorite in the builder, so I can recall it when I need.
Originally, the question appeared when I was writing an XSLT and wanted to use a functx:function and to check in the builder if the concept will work as I expect. Currently, I am not familiar with the differences in this library for XQuery / XPath, but I will consider it when testing.
best Oleksii
Kind regards,
Oleksii Sapov-Erlinger
Oleksii Sapov-Erlinger
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service