在python中使用xslt转换多个xml文件

在python中使用xslt转换多个xml文件,python,xslt-2.0,Python,Xslt 2.0,我有一个在单个xml文件上运行的xslt脚本,我需要拿出一个python代码,这样我就可以使用该代码运行这个xslt,并使用一些python代码在xslt的输出中插入一些东西?是否可以使用python调用外部xslt脚本 例如 input dir有一些xml,xslt在这些输入xml上运行,并使用python脚本在输出目录中创建文件。是的,这是可能的,请参阅或 关于使用多个XML文件,您有几个选项: 使用参数并将其值设置为要加载的文档URI,并使用XSLT中的document函数加载多个输入文档

我有一个在单个xml文件上运行的xslt脚本,我需要拿出一个python代码,这样我就可以使用该代码运行这个xslt,并使用一些python代码在xslt的输出中插入一些东西?是否可以使用python调用外部xslt脚本

例如


input dir有一些xml,xslt在这些输入xml上运行,并使用python脚本在输出目录中创建文件。

是的,这是可能的,请参阅或

关于使用多个XML文件,您有几个选项:

  • 使用参数并将其值设置为要加载的文档URI,并使用XSLT中的
    document
    函数加载多个输入文档
  • 如果您只知道位置,并且它是一个目录,则某些处理器允许您使用“document('dir/with/xml/*.xml)”
  • 如果失败,您可以创建一个URIResolver。如何做到这一点取决于您使用的处理器

  • 关于您关于创建多个输出文档的问题,XSLT1.0(通常与Python一起使用)不太容易,但是您可以切换到使用,尽管这需要更多的设置工作。一旦完成此操作,您可以使用
    xsl:result-document
    创建多个结果文档以动态计算位置,如果您愿意的话。

    您可以使用lxml来完成,但它只支持xslt 1

    import os
    import lxml.etree as ET
    
    inputpath = "D:\\temp\\"
    xsltfile = "D:\\temp\\test.xsl"
    outpath = "D:\\output"
    
    
    for dirpath, dirnames, filenames in os.walk(inputpath):
                for filename in filenames:
                    if filename.endswith(('.xml', '.txt')):
                        dom = ET.parse(inputpath + filename)
                        xslt = ET.parse(xsltfile)
                        transform = ET.XSLT(xslt)
                        newdom = transform(dom)
                        infile = unicode((ET.tostring(newdom, pretty_print=True)))
                        outfile = open(outpath + "\\" + filename, 'a')
                        outfile.write(infile)
    
    要使用XSLT2,您可以从