您可以简单地使用XSLT-1.0来处理XML:
-
创建以下XSLT-1.0文件(此处名为“trans.XSLT”),并注意以下事实:
xmlns=...
命名空间定义为
xmlns:std=...
在样式表元素中。这个
身份模板
只需将所有元素从输入复制到输出,另一个模板在每个元素的值之前添加字符串“Sir”
<name>
要素
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:std="http://people.example.com">
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="std:name">
<xsl:copy>
<xsl:value-of select="concat('Sir ',.)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
-
从Python中调用此模板:
import lxml.etree as ET
xml_filename = "input.xml"
xsl_filename = "trans.xslt"
out_filename = "output.xml"
dom = ET.parse(xml_filename)
xslt = ET.parse(xsl_filename)
transform = ET.XSLT(xslt)
newdom = transform(dom)
newdom.write(out_filename, encoding='utf-8', xml_declaration=True)
最后一个命令指定输出格式。必须指定XML声明及其编码
关于write命令
(而且不是在可能的情况下)
.tostring
).产出如下:
这两个步骤生成以下输出:
<?xml version='1.0' encoding='UTF-8'?>
<actors xmlns:fictional="http://characters.example.com" xmlns="http://people.example.com">
<actor>
<name>Sir John Cleese</name>
<fictional:character>Lancelot</fictional:character>
<fictional:character>Archie Leach</fictional:character>
</actor>
<actor>
<name>Sir Eric Idle</name>
<fictional:character>Sir Robin</fictional:character>
<fictional:character>Gunther</fictional:character>
<fictional:character>Commander Clement</fictional:character>
</actor>
</actors>