xml-to-json number-formatter 条目无效

问题描述 投票:0回答:1

在使用 Saxon 12.1 时,我尝试使用功能

xml-to-json
新选项条目
number-formatter
。撒克逊人似乎认出了它,但我的输出没有任何变化。

输入 XML

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="repro.xsd">
<OptionPosition>-27975240</OptionPosition>
</root>

输入 XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/2005/xpath-functions" xmlns:hr="hr" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:math="http://www.w3.org/2005/xpath-functions/math" xmlns:array="http://www.w3.org/2005/xpath-functions/array" xmlns:map="http://www.w3.org/2005/xpath-functions/map" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:err="http://www.w3.org/2005/xqt-errors" exclude-result-prefixes="array fn map math xhtml xs err" version="3.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <!--<xsl:import-schema schema-location="repro.xsd"/>--> 
    <xsl:function name="hr:really-good" as="xs:string">
        <xsl:param name="input" as="xs:string"/>
        1</xsl:function>
    <xsl:template match="/" name="xsl:initial-template">
        <xsl:variable name="mine">
            <map>
                <array key="AdjudicatorName">                   
                        <number>
                            <xsl:value-of select="/root/OptionPosition"/>
                        </number>           
                </array>                
            </map>
        </xsl:variable>
        <xsl:value-of select="xml-to-json($mine, map{'number-formatter': hr:really-good })" />
    </xsl:template>     
</xsl:stylesheet>

我意识到 Saxon 文档中没有任何地方说它已实现,但也没有说它不是。

xpath saxon xslt-3.0
1个回答
0
投票

我从命令行使用这个查询做了一个快速测试:

let $x := <fn:number xmlns:fn='http://www.w3.org/2005/xpath-functions'>25</fn:number> 
return xml-to-json($x, map{'number-formatter':function($n){'++++'||$n}})

它产生了输出++++25.

所以这个功能原则上是有效的。

您的代码中存在一个明显的错误,即您已将属性的值设置为

hr:really-good
而不是
hr:really-good#1
,因此它被解释为元素名称而不是函数引用。但是,如果我尝试复制它,我会收到一条明确的错误消息,告诉我该值必须是一个函数。

这可能与代码中的另一个错误有关,即提供给 xml-to-json 函数的 XML 位于错误的命名空间中。但同样,我希望这会导致错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.