【问题标题】:XSLT not working when no root element container is included不包含根元素容器时 XSLT 不起作用
【发布时间】:2020-11-21 13:09:11
【问题描述】:

我想使用 XSLT 从 XML 文件创建一个文本文件。

这是我的代码:

import lxml.etree as ET

dom = ET.parse('a_file.xml')
xslt = ET.parse('a_file.xsl')
transform = ET.XSLT(xslt)
newdom = transform(dom)
print(ET.tostring(newdom, pretty_print=True))

a_file.xsl 在模板中不包含这样的根元素时:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">

    <xsl:text>{ this is a test }</xsl:text>
    
    </xsl:template>
</xsl:stylesheet>

代码返回None,但是当我添加一个根元素时,它就可以工作了。 &lt;r&gt;&lt;xsl:text&gt;{ this is a test }&lt;/xsl:text&gt;&lt;/r&gt;

【问题讨论】:

  • 你能告诉我们a_file.xml吗?
  • 任何有效的 xml 文件都可以...
  • 没有根节点的 XML 文件无效,因此您的转换将不起作用。

标签: python python-3.x xml xslt lxml


【解决方案1】:

如果您想创建一个文本文件作为 XSLT 转换的结果,那么您需要对问题中的代码进行两项更改。

首先,您需要告诉 XSLT 它将生成文本输出。将以下元素添加到您的样式表中,作为 &lt;xsl:stylesheet&gt; 元素的直接子元素:

    <xsl:output method="text" encoding="utf-8" />

其次,如果要将结果转换为字符串,请按照lxml documentation中的指导并在其上调用str(...),即

print(str(newdom))

而不是

print(ET.tostring(newdom, pretty_print=True))

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2017-11-29
    • 2011-04-19
    • 2012-05-26
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多