用文本替换XML元素

2024-09-27 17:51:17 发布

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

我有一个奇怪的、类似xml的文件,如下所示:

<line>
^FX czesc dostawcy^FS
^BY4,3,90^FT30,430^BCN,,N,N,N,D
^FD<param id="P_BARCODEIKEA" />^FS
^FT30,480^A0N,34^FH\^FD<param id="P_ARTYKULNAZWA" />^FS
^FT30,700^A0N,30^FH\^FD<param id="P_TODAY" />, <param id="P_CURRENTSHIFT" />,      
^FT520,600^A0N,120,120^FH\^FD<param id="P_LABELNUMBER" />^FS
^FT700,600^A0N,120,120^FH\^FD`1^SFnd,1^FS
^FX 30,410 GB800,0,3^FS
</line>

例如,如何用Python中的文本节点替换\<param id="P_ARTYKULNAZWA" \/\>

示例:如果参数p_ARTYKULNAZWA=“10.10.10”,则要替换“<;param^{id1}”$


Tags: 文件idparamlinexmlfsfxfd
1条回答
网友
1楼 · 发布于 2024-09-27 17:51:17

此XSLT转换将用文本替换元素。它可以集成到python脚本中,也可以使用任何一致的xslt处理器。我将xslt选择范围缩小到您的示例,但是可以根据需要扩大选择范围

import lxml.etree

xml_text = '''\
<line>
^FX czesc dostawcy^FS
^BY4,3,90^FT30,430^BCN,,N,N,N,D
^FD<param id="P_BARCODEIKEA" />^FS
^FT30,480^A0N,34^FH\^FD<param id="P_ARTYKULNAZWA" />^FS
^FT30,700^A0N,30^FH\^FD<param id="P_TODAY" />, <param id="P_CURRENTSHIFT" />,      
^FT520,600^A0N,120,120^FH\^FD<param id="P_LABELNUMBER" />^FS
^FT700,600^A0N,120,120^FH\^FD`1^SFnd,1^FS
^FX 30,410 GB800,0,3^FS
</line>'''

xslt_text='''\
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    
  <xsl:output method="xml"/>
    
  <xsl:template match="param[@id='P_ARTYKULNAZWA']">
    <xsl:value-of select="@id"/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>'''

doc = lxml.etree.XML(xml_text)
xslt = lxml.etree.XSLT(lxml.etree.XML(xslt_text))
new_doc = xslt(doc)
print(lxml.etree.tostring(new_doc, pretty_print=True).decode('utf-8'))

结果

<line>
^FX czesc dostawcy^FS
^BY4,3,90^FT30,430^BCN,,N,N,N,D
^FD<param>P_BARCODEIKEA</param>^FS
^FT30,480^A0N,34^FH\^FDP_ARTYKULNAZWA^FS
^FT30,700^A0N,30^FH\^FD<param>P_TODAY</param>, <param>P_CURRENTSHIFT</param>,      
^FT520,600^A0N,120,120^FH\^FD<param>P_LABELNUMBER</param>^FS
^FT700,600^A0N,120,120^FH\^FD`1^SFnd,1^FS
^FX 30,410 GB800,0,3^FS
</line>

相关问题 更多 >

    热门问题