概述
<xsl:template match="/"> <xsl:variable name="result" select="myns:my-func(./*)" /> ... </xsl:template>
some sample <em>text</em>
使用lxml可以通过XSL样式表正确设置python函数my_func,并使用lxml.html.fragments_fromstring获取格式为的结果:
[‘some sample’,< Element em at 0x106c203b0>]
如何返回此列表,以便稍后可以在变量的XSL转换中使用它,就像它是直接在XSL上下文中从XPath表达式收集一样?似乎每当我将一个字符串列表传递回XSL处理器时,lxml就会引发异常.
硬编码示例可能如下所示:
from lxml import etree def myFunc(context,parm): em = etree.Element('em') em.text = 'text' return ['some sample ',em]
请注意,在这种情况下,parm参数不是必需的,但我在此处将其包含在内,以匹配将调用中的参数传递给myns的示例代码:my-func.
如果你想使用fragments_fromstring来构建你的节点集,而不是手动构建它,那么函数定义就变得更加简单了.
def myFunc(context,parm): import lxml.html return lxml.html.fragments_fromstring('some sample <em>text</em>')
myns = etree.FunctionNamespace('http://example.org/myNamespace') myns['my-func'] = myFunc
最后,您可以在XSLT样式表中使用它,如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myns="http://example.org/myNamespace"> <xsl:template match="/"> <xsl:variable name="result" select="myns:my-func(./*)" /> <xsl:for-each select="$result"> <xsl:copy-of select="." /> </xsl:for-each> </xsl:template> </xsl:stylesheet>
请注意,样式表中使用的命名空间URL必须与FunctionNamespace中注册的命名空间URL匹配.
现在假设您已将此样式表加载到名为xslt的字符串中,示例转换可能如下所示:
root = etree.XML('<root></root>') doc = etree.ElementTree(root) transform = etree.XSLT(etree.XML(xslt)) res = transform(doc)
有关完整的示例,请参阅此pastebin link.
总结
以上是编程之家为你收集整理的python – 如何从XPath函数返回文本片段?全部内容,希望文章能够帮你解决python – 如何从XPath函数返回文本片段?所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧