向XSLT样式表添加Xinclude支持
我有一个将XML格式转换为HTML的大型XSLT样式表。我想在输入XML文件中添加对XInclude的支持。目标是每个include文件以及include XML文件都可以独立地进行XSD验证。我已经控制了XML模式中的所有更改(我认为);只有特定的XML元素可以移出以包含文件,并且只有一个级别的包含文件嵌套。在Eclipse的XML编辑器中,它可以很好地验证包含文件和每个包含文件 XSLT样式表有两种使用方式,这里我们更接近我的问题:向XSLT样式表添加Xinclude支持,xslt,xinclude,Xslt,Xinclude,我有一个将XML格式转换为HTML的大型XSLT样式表。我想在输入XML文件中添加对XInclude的支持。目标是每个include文件以及include XML文件都可以独立地进行XSD验证。我已经控制了XML模式中的所有更改(我认为);只有特定的XML元素可以移出以包含文件,并且只有一个级别的包含文件嵌套。在Eclipse的XML编辑器中,它可以很好地验证包含文件和每个包含文件 XSLT样式表有两种使用方式,这里我们更接近我的问题: 在构建环境中,使用使用lxml进行XSLT转换的Pytho
Andy要做到这一点,您可能应该看看XProc 您的用例似乎太复杂了,无法在单个XSLT中完成 有没有什么方法可以让我在调用时调用两个XSLT样式表 是否使用Web浏览器打开(包括)XML文件 有什么方法可以改进现有的XSLT样式表吗 XInclude支持使其保持为单个样式表 [3] XSLT样式表中是否有任何方法可以修改输入 [4] Web浏览器在XInclude解析中是否提供任何支持 以相反的顺序解决问题,因为这样更容易: (4) 我还没有看到任何web浏览器进行XInclude扩展 (3) 我不知道“修改输入”是什么意思:XSLT转换 (或修改)将输入转换为输出。除非您要求:可以 在一个步骤中修改输入,然后再次转换输出 再次?是:如果浏览器支持exslt:节点集,则您可以 使用一次转换的结果创建一个变量,然后选择 该变量用于另一个转换。您可以使用模式选择 不同步骤的不同模板集 比如:
<xsl:variable name="doc.all">
<xsl:apply-templates mode="p1" select="/" />
</xsl:variable>
使用mode=“p1”模板集合,以及
选择该变量作为节点集的模板:
<xsl:template match="/" >
<xsl:apply-templates select="exslt:node-set($doc.all)" />
</xsl:template>
[XSLT-2.0可以更直接地处理节点集,但是没有浏览器
本机支持XSLT-2.0]
(2) 我不知道您现有的样式表是什么样子的,但是可能:是的。
当你认为它必然是两个分开的时候,你是在按程序思考
执行XInclude处理的步骤和xslt的其余部分
XInclude使用XSLT进行扩展,那么XInclude只是另一组要匹配的模式
您可能需要类似于此模板的内容来执行xinclude扩展:
<xsl:template match="xi:include[@href][@parse='xml' or not(@parse)]">
<xsl:apply-templates select="document(@href)/*" />
</xsl:template>
:在文档后添加“/*”(@href)
避免在包含的文档和基础上再次调用根模板
文件
然后包括一个match=“/”模板来设置外部html,以及
转换模式以创建内部节点
这里隐含了两个步骤:第一步是将输入源重定向到
xi:include/@href当它遇到该元素时。步骤是处理节点
在该文档中根据其他匹配模板
(1) 使用PI只能运行一个样式表,但是
浏览器中的Javascript,因此只要避免跨域安全问题,就应该
能够按程序办事
需要考虑的几点:
我不知道浏览器会做什么,如果一次转换的结果是,你用不同的指令生成另一个文件。它会继续吗?可能值得一试。如果不会,你可以用javascript显式地进行处理,然后应用第二次转换
浏览器中支持xslt、javascript和css:您可以将javascript和css注入到输出中