Используя lxml
, вы можете применить таблицу стилей XSLT-1.0, которая игнорирует элемент, который должен быть удален при передаче параметра в таблицу стилей. Остальная часть файла копируется с помощью идентификационного шаблона , а ненужные пробелы удаляются xsl:strip-space
.
Здесь параметр передается remov
(= RatePlanEnum
):
remov = ET.XSLT.strparam('RatePlanEnum')
Таблица стилей XSLT-1.0 (remove.xslt
):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:param name="toRemove" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="xs:simpleType">
<xsl:if test="@name != $toRemove">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Код Python для вызова этой таблицы стилей может быть:
import lxml.etree as ET
# Parse XML and XSLT
dom = ET.parse(input_xml_filename)
xslt = ET.parse('remove.xslt')
transform = ET.XSLT(xslt)
# Set the parameter which specifies the element to be removed
remov = ET.XSLT.strparam('RatePlanEnum')
result = transform(dom, toRemove=remov)
# Print the result
print(ET.tostring(result, pretty_print=True))