【发布时间】:2013-07-24 05:29:32
【问题描述】:
我目前在 python 中使用 lxml 进行 XSLT 转换。转换后,我必须将内容写入不同的文件。为了更好地理解我的代码如下:
##function to create a new file and write the result into the file
def new_file(a,b):
full_path = 'path of teh folder to create the file'+a
file_new = open(full_path, 'w')
file_new.write(b)
if xmlRoot.xpath('//slide[@nav_lvl_1="x" and @nav_lvl_2="y"]'):
##xpath to get the all the selected nodes of the attributes x and y
slide_list = xmlRoot.xpath('//slide[@nav_lvl_1="x" and @nav_lvl_2="y"]')
##loop against the obtained list of node element
for each_slide in slide_list:
xslRoot = etree.parse('path of xsl_file')
transform = etree.XSLT(xslRoot)
newdom = transform(xmlRoot)
file_name = ('slide'+each_slide.get('page_number')+'.xml')
result = etree.tostring(newdom, pretty_print=True)
print etree.tostring(newdom, pretty_print=True)
new_file(file_name , result)
以下代码工作得很好,但是当我调用函数来创建文件并将结果写入其中时,它会将整个结果写入文件而不是结果的循环部分。
例如:如果我在slide_list 中有五个节点元素,那么文件xslRoot 将针对不同的值转换五次。对于每个转换,我必须将结果写入五个不同的文件中。当我运行这段代码时,我在创建的所有五个文件中都有五个转换结果,每个文件只需要一个结果。
我犯了什么错误。无法弄清楚。有什么建议吗?
输入 Xml 将是:
- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="8">
and ....
- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="9">
and ...
- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="10">
and ...
- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="11">
and so on...
【问题讨论】:
标签: python xslt python-2.7 lxml dir