使用XSLT将多个XML文件合并为单个XML文件

2024-04-26 09:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将XML位置作为参数从Python发送到XSLT,并尝试将其合并到邮件XML文件中。 下面是使用的元素树的代码

import os
import lxml.etree as ET

inputpath = r"C:\Users\[0].xml"
xsltfile = r"C:\Users\styleSheet.xsl"
outpath = r"C:\Users\Output.xml"

xml = ET.parse(inputpath)
xslt = ET.parse(xsltfile)

transform = ET.XSLT(xslt)
xmlLocation = ET.XSLT.strparam(r"C:\Users\Image.xml")
newdom = transform(xml, xml_path=xmlLocation)

tree_out = ET.tostring(newdom, encoding='UTF-8', pretty_print=True,  xml_declaration=True)
print(tree_out)

xmlfile = open(outpath ,'wb')
xmlfile.write(tree_out)
xmlfile.close()

下面是主XML文件

[0].xml

<?xml version="1.0" encoding="UTF-8"?>
<ps:pt xmlns:ps="http://schemas.microsoft.com/windows/2003/psfrk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1" xmlns:ns0000="http://schemas.mta.com/1" xmlns:psk="http://schemas.microsoft.com/windows/2003/08">
    <ps:pi name="ns0000:PDS">
        <ps:Value xsi:type="xsd:string">
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0AYQBuAHUAYQBsAAAAAAAAAAAAAAAAAAAAAAAAAAAA</ps:Value>
    </ps:pi>
    <ps:pi name="psk:JCAD">
        <ps:Value xsi:type="xsd:integer">1</ps:Value>
    </ps:pi>
</ps:pt>

样式表.xsl

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ps="http://schemas.microsoft.com/windows/2003/psfrk" version="1.0"> 
<xsl:param name="xml_path" /> 
    <xsl:template match="/">
        <xsl:copy>
            <xsl:copy-of select="ps:pt"/>
            <xsl:copy-of select="document($xml_path)/*"/>
        </xsl:copy>
    </xsl:template> 

</xsl:transform>

图像.xml

<?xml version="1.0" encoding="UTF-8"?>
<ps:pt xmlns:ps="http://schemas.microsoft.com/windows/2003/psfrk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1" xmlns:ns0000="http://schemas.mta.com/1" xmlns:psk="http://schemas.microsoft.com/windows/2003/08">
    <ps:f name="psk:PW">
        <ps:Option name="ns0000:Image">
            <ps:sp name="ns0000:File">
                <ps:pr name="ns0000:PWI"/>
            </ps:sp>
        </ps:f>
    </ps:Option>
</ps:pt>

所需输出:输出.xml

<?xml version="1.0" encoding="UTF-8"?>
<ps:pt xmlns:ps="http://schemas.microsoft.com/windows/2003/psfrk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1" xmlns:ns0000="http://schemas.mta.com/1" xmlns:psk="http://schemas.microsoft.com/windows/2003/08">
    <ps:pi name="ns0000:PDS">
        <ps:Value xsi:type="xsd:string">
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0AYQBuAHUAYQBsAAAAAAAAAAAAAAAAAAAAAAAAAAAA</ps:Value>
    </ps:pi>
    <ps:pi name="psk:JCAD">
        <ps:Value xsi:type="xsd:integer">1</ps:Value>
    </ps:pi>
    <ps:f name="psk:PW">
        <ps:Option name="ns0000:Image">
            <ps:sp name="ns0000:File">
                <ps:pr name="ns0000:PWI"/>
            </ps:sp>
        </ps:f>
    </ps:Option>
</ps:pt>

当我运行这个代码的时候。我只看到输出中的[0].xml。它不会同时合并xml的 我做错了什么,哪里做错了。XSLT有什么问题吗?你知道吗


Tags: namecompthttpvalueversionwindowspi