【发布时间】:2019-05-15 15:46:04
【问题描述】:
我有一个 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 元素,link 和一个div。
使用 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
【问题讨论】:
-
如果你这样做
str(generated_html)会发生什么?这是否显示了您期望的所有数据?文档 lxml.de/xpathxslt.html#xslt-result-objects 建议还有一个.write_output()您可以调用generated_html而通用ET.tostring方法可能不知道如何处理作为片段的 XSLT 结果。
标签: python xml python-3.x xslt lxml