该项目仍处于开发阶段,已经在现场环境中使用,因此代码简单地处于快速变化状态以响应我们正在进入的实时数据.我正在通过FO从XML生成PDF文档可能还有其中我还不知道的节点,并希望在我的XSL-FO转换中添加一个“故障转移”指令,将所有未计入的节点放在文档的开头,为红色,加快发现.
我不能忽略惊喜节点,因为需要处理数据.我可以更快地找到“孤儿”数据,我可以更快地得到正确处理和出门.
我尝试使用< xsl:template match =“*”> …< / xsl:template>和各种priority =“”设置,但当然它适用于每个节点.
例如,我可能在一个部分中有这个,因为这些XML块不保证以正确的输出顺序出现. (代码块格式化对我来说不起作用 – 四个空格缩进没有结果,对不起:(
<xsl:template match="AccountSummary"> <fo:block margin-left="2" space-before="1" space-after="1" text-align="center"> <xsl:apply-templates select="Label"/> </fo:block> <xsl:apply-templates select="AccountInfo"/> <xsl:apply-templates select="AccountProfile"/> <xsl:apply-templates select="ChangeInValueOfAccounts"/> <!-- ... more goes here --> </xsl:template>
我想做点什么
<xsl:template match="AccountSummary"> <fo:block margin-left="2" space-before="1" space-after="1" text-align="center"> <xsl:apply-templates select="Label"/> </fo:block> <xsl:apply-templates select="AccountInfo"/> <xsl:apply-templates select="AccountProfile"/> <xsl:apply-templates select="ChangeInValueOfAccounts"/> <!-- ... more goes here --> <xsl:for-each select="not otherwise matched"> <!-- call zomgRED template --> </xsl:for-each> </xsl:template>
理想情况下,我宁愿将zomgRED放在顶部,但在底部也会起作用.或标记文本标记.任何东西吐出最终文件中的文本而不是默默地吃它.
解决方法
1)在样式表中进行身份转换:
<xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template>
2)确保你打电话给< xsl:apply-templates select =“*”/>从所有其他更具体的模板让解析器继续
我们的想法是您的特定模板处理到XSL-FO的预期转换,而身份转换只是将其他所有内容转储到结果树中.递归调用将确保您实际触摸所有节点(这是将它们“记录”的唯一方法)并且身份转换将匹配您未捕获的那些节点.
#2建议实际上可能会影响你的XSL-FO逻辑,所以可能不太可行,如果没有示例输入和当前的XSL-FO转换,我无法分辨.也许将它添加到问题中?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。