【发布时间】:2023-04-08 15:02:01
【问题描述】:
我正在尝试使用编码为 html 实体的内容来转换一些 xml。我想将实体内容输出为有效的 html。
xml是这样的..
<?xml version="1.0" encoding="UTF-8"?><memo Version="1.0">
<header>
<meta title="==PROGRAMMING=="/>
<meta favourite="false"/>
<meta uuid="85f94ab2-77a8-XXXXXXXXXXXXXXX"/>
<meta createdTime="1551038092051"/>
</header>
<contents>
<content><p value="memo2" >=====</p><p>https://medium.freecodecamp.org/</p><p>=====</p>
</content>
</contents>
</memo>
我也有一些 xslt..
xslt_src = '''
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<xsl:apply-templates select="memo/header/meta"/>
</head>
<body>
<xsl:apply-templates select="memo/contents"/>
</body>
</html>
</xsl:template>
<xsl:template match="memo/header/meta">
<xsl:apply-templates select="@title"/>
</xsl:template>
<xsl:template match="memo/contents">
<div class='content'>
<xsl:value-of select="content/text()"/>
</div>
</xsl:template>
<xsl:template match="@title">
<span id='title'>
<xsl:value-of select="."/>
</span>
</xsl:template>
</xsl:stylesheet>
'''
我在 Python 中用 lxml 处理它...
_________________________________________________________________蟒蛇
from lxml import etree
xslt = etree.XML(xslt_src)
transform = etree.XSLT(xslt)
src = open('simple.xml').read()
xml = etree.XML(str.encode(src))
result = transform(xml)
root = result.getroot()
print('-----------------------out 1')
print(etree.tostring(root, pretty_print=True).decode('utf-8'))
print('-----------------------out 2')
content = root.xpath('/html/body/div/text()')
print(content[0])
================================================ ===============
etree.tostring(root) 打印结构化文档,但保留原始 xml 中编码的 html 实体。
-----------出1
<html>
<head>
<span id="title">==PROGRAMMING==</span>
</head>
<body>
<div class="content"><p value="memo2" >=====</p><p>https://medium.freecodecamp.org/</p><p>=====</p>
</div>
</body>
</html>
但如果我打印 root.xpath('/html/body/div/text()')[0](带有 html 内容的节点)我会得到我想要的...
-----------出2
<p value="memo2" >=====</p><p>https://medium.freecodecamp.org/</p><p>=====</p>
================================================ =========================
我的问题是:如何让 etree.tostring(root) 用有效的 html 替换 html 实体,就像我直接使用 text 属性时打印的那样?
干杯!
比特率
【问题讨论】: