将“字符串”参数传递给 xslt 2.0 脚本不起作用,但整数可以

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

有一个问题,尝试将字符串参数传递给 xslt 2.0 脚本,纯整数参数在本例中工作正常,但像

"value"
甚至
"w1234"
这样的字符串将无法通过 xslt 中的
$my_param
访问。

这是一个已知问题吗? (Gemini 无法提供帮助,代码中的典型 string() 修改也无法提供帮助。)如何才能将字符串参数传递到 XSLT 2.0 中?

Python:

from lxml import etree
xml_doc = etree.parse('input.xml')
xslt_doc = etree.parse('my_stylesheet.xslt')
transform = etree.XSLT(xslt_doc)
result_tree = transform(xml_doc, my_param='value')
result_tree.write('output.xml', pretty_print=True)

XSLT-样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <root>
      <param><xsl:value-of select="$my_param"/></param>
      </root>
  </xsl:template>
</xsl:stylesheet>

XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <data />
</root>

预期:

<root>
  <param>value</param>
</root>

实际:

<root>
   <param/>
</root>

如果

my_param
123
(或任何其他整数,甚至
10-2
会导致
<param>8</param>
)也可以正常工作。执行 xslt 脚本后,字符串值似乎会丢失。

  • Python v3.12.4
  • lxml v5.2.2
  • Win10
python lxml
1个回答
0
投票

您可以使用

etree.XLST.strparam

from lxml import etree
xml_doc = etree.parse('input.xml')
xslt_doc = etree.parse('my_stylesheet.xslt')
transform = etree.XSLT(xslt_doc)
result_tree = transform(xml_doc, my_param=etree.XSLT.strparam('value'))
result_tree.write('output.xml', pretty_print=True)

输出:

<root>
  <param>test</param>
</root>
© www.soinside.com 2019 - 2024. All rights reserved.