xslt转换时lxml缺少节点

2024-05-23 17:29:22 发布

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

我有一个XML和XSLT。来自法国的天气数据

XML:https://donneespubliques.meteofrance.fr/donnees_libres/Pdf/BRA/BRA.CHABLAIS.20190514130953.xml XSLT:http://donneespubliques.meteofrance.fr/donnees_libres/Pdf/BRA/bra.xslt

我测试了网站https://xslttest.appspot.com/,它似乎使用了http://saxon.sourceforge.net/,它给了我两个html元素linkdiv。你知道吗

对于lxml,它只提供link元素:

import requests
import lxml.etree as ET

xml = ET.fromstring(requests.get('https://donneespubliques.meteofrance.fr/donnees_libres/Pdf/BRA/BRA.CHABLAIS.20190514130953.xml').content)
xslt = ET.fromstring(requests.get('http://donneespubliques.meteofrance.fr/donnees_libres/Pdf/BRA/bra.xslt').content)
transform = ET.XSLT(xslt)
generated_html = transform(xml)
print(ET.tostring(generated_html, pretty_print=True))

输出:

b'<link rel="stylesheet" type="text/css" href="BRA.css"/>\n'

我觉得XSLT可能会生成两个XML元素,没有根,这可能就是lxml只给我一个link元素的原因。你知道吗

使用lxml 4.3.3


Tags: 元素pdflinkxmlfrlxmletlibres
1条回答
网友
1楼 · 发布于 2024-05-23 17:29:22

如果我在Python中使用str(generated_html)generated_html.write_output(sys.stdout)(尽管后者要工作,似乎xsl:output中声明的编码需要与stdout的编码匹配,在Windows上似乎是UTF-8,不确定其他平台)。你知道吗

另请参见https://lxml.de/xpathxslt.html#xslt-result-objects警告

it is possible to use the .write() method (known from ElementTree objects) to serialise the XSLT result into a file, it is better to use the .write_output() method. The latter knows about the tag and writes the expected data into the output file.

因此,我认为您的假设是,生成的包含多个顶级元素的片段不能很好地与所使用的tostring方法配合使用。你知道吗

相关问题 更多 >