因为我无法使用XSL IDE,所以我使用lxml编写了一个超级简单的Python脚本,用给定的XSL转换转换给定的XML文件,并将结果写入文件。如下(删节):
p = XMLParser(huge_tree=True)
xml = etree.parse(xml_filename, parser=p)
xml_root = xml.getroot()
print(xml_root.tag)
xslt_root = etree.parse(xsl_filename)
transform = etree.XSLT(xslt_root)
newtext = transform(xml)
with open(output, 'w') as f:
f.write(str(newtext))
我收到以下错误:
“lxml.etree.XSLTApplyError:无法评估'select'表达式”
...但我的XSLT中有很多select
个表达式。在仔细查看并隔离了代码块之后,我仍然不知道哪个select
失败了,或者为什么会失败。
如果没有尝试调试代码,有没有办法从lxml中获取更多信息,比如来自失败表达式的行号或引用?
答案 0 :(得分:2)
这可能是this question的重复,但我认为这里的额外好处是Python方面。
链接的答案指出每个解析器都包含您可以访问的错误日志。唯一的"技巧"正在捕获这些错误,以便您可以在创建日志后查看它。
我这样做了(也许也很差,但它有效):
import os
import lxml.etree as etree
from lxml.etree import XMLParser
import sys
xml_filename = '(some path to an XML file)'
xsl_filename = '(some path to an XSL file)'
output = '(some path to a file)'
p = XMLParser(huge_tree=True)
xml = etree.parse(xml_filename, parser=p)
xml_root = xml.getroot()
xslt_root = etree.parse(xsl_filename)
transform = etree.XSLT(xslt_root)
newtext = None
try:
newtext = transform(xml)
with open(output, 'w') as f:
f.write(str(newtext))
except:
for error in transform.error_log:
print(error.message, error.line)
此日志中的消息比打印到控制台的消息更具描述性,并且" line" element将指向发生故障的行号。