Я пытаюсь отправить местоположение 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>
styleSheet.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>
Image.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>
Обязательный выход: Output.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?