Add more functions to the XPath builder
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 84
- Joined: Wed Jul 19, 2017 6:04 pm
- Location: Austria
- Contact:
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: 102
- 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]')
-
- Posts: 9434
- Joined: Fri Jul 09, 2004 5:18 pm
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: 102
- 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
-
- Posts: 84
- Joined: Wed Jul 19, 2017 6:04 pm
- Location: Austria
- Contact:
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