私信  •  关注

zx485

zx485 最近创建的主题
zx485 最近回复了

您可以简单地使用XSLT-1.0来处理XML:

  1. 创建以下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>
    
  2. 从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>