我是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)如果可能不确定解析器应该返回什么