我正在尝试使用XSLT(xsltproc.exe)将纯数据xml文件转换为svg图。结果svg中的许多符号有些复杂,通过直接在主xsl文件中包含svg代码,使xsl难以阅读。如果我可以将其放在单独的文件中,然后将其简单地包含在xsl:template中的适当位置,将会更加方便。
但是,<xsl:include/>
抱怨它不在xsl:stylesheet元素本身之外的任何地方。
有没有一种方法可以在模板中包含大量的xml代码?
我正在尝试使用XSLT(xsltproc.exe)将纯数据xml文件转换为svg图。结果svg中的许多符号有些复杂,通过直接在主xsl文件中包含svg代码,使xsl难以阅读。如果我可以将其放在单独的文件中,然后将其简单地包含在xsl:template中的适当位置,将会更加方便。
但是,<xsl:include/>
抱怨它不在xsl:stylesheet元素本身之外的任何地方。
有没有一种方法可以在模板中包含大量的xml代码?
好吧,您可以使用document
函数来读取辅助XML文档,而SVG似乎是这样。然后,您可以在任何需要的地方使用<xsl:copy-of select="document('foo.svg')"/>
,或者在需要时使用模板进一步处理SVG。
<xsl:include>
仅用于将另一个XSLT样式表合并到当前样式表中(模拟功能为<xsl:import>
,但设置了不同的优先级),并且如您所述,必须成为样式表根元素的子元素。
您要做的是使用XPath function document(),它将任何XML标记文件的URI作为第一个(或唯一)参数。然后,您可以在其他模板,变量等中使用它。
例如,如果要获取SVG文件的标题,则可以使用:
<xsl:value-of select="document(your.svg)/svg/title"/>
这可能是您使用SVG文件可能要做的最少有趣的事情,但是您可以在其中看到如何导航外部“文档”的XML结构。
如果您具有平面文件结构,则URI非常简单。如果在其他地方使用文件,它可能会变得更加复杂,但是它实际上可以用于从任何XML格式读取和使用数据。