微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – 尚未处理的任何节点的XSLT模板?

是否可以匹配“任何尚未匹配/处理的节点”?最好不要将我的样式表变成一个巨大的for-each / Choose语句,因为当前的排序很关键.

该项目仍处于开发阶段,已经在现场环境中使用,因此代码简单地处于快速变化状态以响应我们正在进入的实时数据.我正在通过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 举报,一经查实,本站将立刻删除。