实现python lxml自定义解析器

时间:2015-03-23 23:39:57

标签: python xml xslt lxml

我是xsl转换的新手,目前正在尝试将特殊用途的xml宏语言转换为xslt。我已经能够移植除了我寻找可能的解决方案之外的所有功能。

目前它的代码行如下:

<xacro:include filename="$(find my_package)/temp/common.xacro"/>

它执行与:

相同的操作
<xsl:include href="/home/my_package/temp/common.xslt" />.

问题是$(查找包),基本上解析器搜索特定位置,该位置返回包“/ home / my_package”的完整路径,然后包含该文件。

我已经读过,不可能在xsl:include的href中包含变量,但我已经在一些地方读过声明要使用解析器。

<xsl:include href="package:my_package/temp/common.xslt" />.

Python lxml:

import lxml.etree as macro

class PrefixResolver(macro.Resolver):
    def resolve(self, url, pubid, context):
        if url.startswith("package"):
            #some code that populates results_xml
            return self.resolve_filename(result_xml, context)

def main(args):
    honk_parser = macro.XMLParser()
    honk_parser.resolvers.add(PrefixResolver())
    honk_doc = macro.parse(xslt_filepath, honk_parser)
    tran = macro.XSLT(honk_doc)
    f = StringIO.StringIO('<junk></junk>')
    dom = macro.parse(f)
    new_dom = tran(dom)
    print macro.tostring(new_dom, pretty_print=True)

我无法获得有效的解决方案,因为:

1)我不确定这是否可能

2)如果可能不确定解析器应该返回什么

0 个答案:

没有答案