Estou usando o SaxonC-HE 12.5 para aplicar uma transformação XSL 3.0 em um aplicativo Python 3.10. A folha de estilo XSL pega um parâmetro que é um mapa de string -> string, como segue:
<xsl:param name="myMapParam" as="map(xs:string, xs:string)">
Para construir este mapa, estou usando o create_xdm_dict()
método estático de saxonche
para converter um dicionário Python em um dicionário XDM e, em seguida, usar este dicionário XDM como entrada para o make_map()
método in PySaxonProcessor
para criar um mapa que posso passar como um parâmetro para a transformação:
from saxonche import *
with PySaxonProcessor(license=False) as saxonproc:
dict = {"a": saxonproc.make_string_value("jack"),
"b": saxonproc.make_string_value("jill")}
xdm_dict = create_xdm_dict(saxonproc, dict)
map = saxonproc.make_map(xdm_dict)
Na verdade, esse código é quase exatamente igual ao da documentação do SaxonC , exceto que os valores no dicionário são strings, não números.
Quando tento fazer isso, o Saxon falha no create_xdm_dict()
método com a java.lang.NumberFormatException
porque parece que ele tenta converter os valores em números (Doubles, para ser mais preciso), embora eu tenha pedido explicitamente para criar valores de string:
java.lang.NumberFormatException: For input string: "jack"
at jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
at jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:543)
at net.sf.saxon.type.StringToDouble.stringToNumber(StringToDouble.java:178)
at net.sf.saxon.s9api.XdmAtomicValue.getLongValue(XdmAtomicValue.java:454)
at net.sf.saxon.option.cpp.XdmValueForCpp.getLongValue(XdmValueForCpp.java:235)
Qualquer orientação sobre como criar um mapa XDM com valores de string seria muito apreciada. Obrigado!
As chaves do dicionário também devem ser criadas como strings XDM com saxon_processor.make_string_value, por exemplo
dá
com, por exemplo, amostra XSLT sendo