【问题标题】:Python script that can email in XML format可以以 XML 格式发送电子邮件的 Python 脚本
【发布时间】:2020-10-17 04:52:48
【问题描述】:

是否可以通过使用 XML 文档在电子邮件正文中创建可以通过电子邮件发送 XML 分层格式的 Python 脚本。

只是为您提供背景知识,我在 XML 文档中更新了一些细节,并希望在电子邮件中输入相同的 XML 格式。

目前,我使用 XSL 来设置 XML 文档的样式,并使用 Python“lxml”库将 XML 转换为 HTML,但我当前的脚本正在删除最终输出中的 XML 标记。

所以,我正在寻找一种在我的输出中保留这些 XML 标记的方法,我最好使用 XML 到 HTML 的相同方法,因为我需要在我的自动电子邮件中加载这个 HTML 结构。

Python 脚本

from lxml import etree

xsl = etree.parse("tx.xsl")
updated = etree.XSLT(xsl)
xml = etree.parse("tx.xml")
html = updated(xml)

html.write("XML-Transformed.html")

XSL 代码

?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:template match="/">
        <html>
            <body>
                <table>
                    <xsl:for-each select="ROOT">
                           <tr>
                             <td><xsl:value-of select="Summary"/></td>
                           </tr>
                           <tr>
                             <td><xsl:value-of select="customer_Name"/></td>
                           </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
     </xsl:template>
 </xsl:stylesheet>

XML

<ROOT>
<Summary>ZZZZ</Summary>
<customer_Name>YYYY</customer_Name>
</ROOT>

电流输出

ZZZZ
YYYY

预期

<Summary>ZZZZ</Summary>
<customer_Name>YYYY</customer_Name>

【问题讨论】:

  • @mzjn 已添加,所有详细信息均使用我当前的代码。
  • 我同意 msjn。你想做什么?如果你只是问有没有可能,你试过了吗?你知道它是否有效吗?如果它不起作用,那么我们将能够为您提供更多帮助并给出更好的答案。
  • @12944qwerty 请看帖子,我已经更新了细节。你看不到吗?
  • 哦。我没见过。对不起。
  • @12944qwerty 没问题,我已经更新得很详细了。

标签: python xml xslt lxml


【解决方案1】:

XSLT 转换的工作方式是,您需要明确地将输出中所需的所有内容添加到转换中。另外,如果你想让浏览器显示这些 XML 标签,它们需要是escaped

试试这个 XSLT 文件,在浏览器中打开结果,如果你需要的话,请告诉我:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:template match="/">
        <html>
            <body>
                <table>
                    <xsl:for-each select="ROOT">
                           <tr>
                             <td>&lt;Summary&gt;<xsl:value-of select="Summary"/>&lt;/Summary&gt;</td>
                           </tr>
                           <tr>
                             <td>&lt;customer_Name&gt;<xsl:value-of select="customer_Name"/>&lt;/customer_Name&gt;</td>
                           </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
     </xsl:template>
 </xsl:stylesheet>

编辑:如果您想要带有自定义标签的 HTML,您需要将它们显式添加到 XSLT 转换中 - 这次不要转义:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:template match="/">
        <html>
            <body>
                <table>
                    <xsl:for-each select="ROOT">
                           <tr>
                             <td><Summary><xsl:value-of select="Summary"/></Summary></td>
                           </tr>
                           <tr>
                             <td><customer_Name><xsl:value-of select="customer_Name"/></customer_Name></td>
                           </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
     </xsl:template>
 </xsl:stylesheet>

【讨论】:

  • 感谢您的回复康拉德,我已经尝试过这种方式,但它不会在HTML中保留XML的原始标签并添加'<'将转义 但此标记将与文本合并,HTML 结构将类似于 "Text Text".
  • 我不确定你的意思。您需要转义这些标签,因为它们不是有效的 HTML 标签。当然,除非在您的实际 XML 中,这些标记是有效的 HTML 标记——在这种情况下,您只需将它们复制粘贴到您的 XSLT 文件中。
  • 感谢 Konrad,我正在寻找一种方法,以便我可以使用 Python 脚本将 XML 解析为 HTML 来创建自定义 HTML 标签“summary”和“customer_name”。我看过这个link,但无法将它应用到我的解决方案中。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2014-06-22
  • 2019-11-27
相关资源
最近更新 更多