我必须使用不同语言的两个文本块创建略微动态的pdf(两个变量)。
两个块中的大多数文本都是静态的
我在想是否可以创建一个可以为布局创建xsl-fo的模板。然后创建两个包含自定义xml的变量。类似的东西:
<xsl:variable name="TEXT_CONTENT_ENG" >
<STATIC_TEXT>
<LABEL>Hello</LABEL>
<REQUEST>Please pay your bill before </REQUEST>
</STATIC_TEXT>
</xsl:variable>
最后,我可以使用这些变量两次应用创建的模板。
xsl似乎使用给定变量进行验证,但我无法将模板应用于该xml。尝试过并且文档($ TEXT_CONTENT_ENG)也没有用。
这是否可行以及如何做?
答案 0 :(得分:1)
两个街区中的大部分文字都是 静态
如果这是真的,那么正确的XSLT方式是内联数据。来自http://www.w3.org/TR/xslt#stylesheet-element
另外,xsl:stylesheet 元素可以包含任何元素 从XSLT名称空间,提供 元素的扩展名有一个 非空名称空间URI。存在 这些顶级元素不得 更改XSLT元素的行为 和在此定义的功能 文献;例如,它不会 允许这样的顶级元素 指定xsl:apply-templates 是使用不同的规则来解决 冲突。因此,XSLT处理器就是 总是可以自由地忽略这样的顶级 元素,必须忽略顶级 如果它没有给出错误的元素 无法识别名称空间URI。 这些元素可以提供 例如,
扩展元素或扩展函数使用的信息(参见
[14扩展]),有关如何处理结果树的信息,
有关如何获取源树的信息,
有关样式表的元数据,
样式表的结构化文档。
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<variable name="vRTF">
<STATIC_TEXT xmlns="">
<LABEL>Hello</LABEL>
<REQUEST>Please pay your bill before </REQUEST>
</STATIC_TEXT>
</variable>
<template match="/">
<apply-templates
select="document('')/*/xsl:variable[@name='vRTF']/node()"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
</template>
<template match="@*|node()">
<copy>
<apply-templates select="@* | node()"/>
</copy>
</template>
</stylesheet>
输出:
<STATIC_TEXT>
<LABEL>Hello</LABEL>
<REQUEST>Please pay your bill before </REQUEST>
</STATIC_TEXT>
注意:在XML 1.0中,您只能重置默认命名空间。
答案 1 :(得分:1)
Alejandro的答案一般都是正确的,但是非常规使用命名空间有点令人困惑,他将数据包装在一个不必要的xsl:variable
元素中,这也有点令人困惑。
只要将元素放在自己的命名空间中,就可以使它成为xsl:stylesheet
元素的子元素。然后,您可以使用document('')
访问它,它返回当前的XSLT文档:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:in="urn:inline-data"
exclude-result-prefixes="in"
>
<in:TEXT_CONTENT_ENG>
<STATIC_TEXT>
<LABEL>Hello</LABEL>
<REQUEST>Please pay your bill before </REQUEST>
</STATIC_TEXT>
</in:TEXT_CONTENT_ENG>
<xsl:template match="/">
<output>
<xsl:apply-templates
select="document('')/xsl:stylesheet/in:TEXT_CONTENT_ENG/*"/>
</output>
</xsl:template>
<xsl:template match="STATIC_TEXT">
<xsl:text>The label is </xsl:text>
<xsl:value-of select="LABEL"/>
<xsl:text> and the request is </xsl:text>
<xsl:value-of select="REQUEST"/>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:0)
使用xalan我能够这样做:
<xsl:apply-templates select="xalan:nodeset($TEXT_CONTENT_ENG)/STATIC_TEXT"/>
exslt
也可以使用类似的功能