XSLT 表在输出中乱序

Posted

技术标签:

【中文标题】XSLT 表在输出中乱序【英文标题】:XSLT tables out of order in output 【发布时间】:2019-01-25 11:48:54 【问题描述】:

我有这样的表:

文本文本

我有这样的 XSLT 模板匹配(已删除属性匹配,因为此示例不需要它们):

<xsl:template match="colgroup">
    <tgroup>                    
        <xsl:apply-templates select="descendant::col | descendant::thead | descendant::tbody"/>
    </tgroup>
</xsl:template>

<xsl:template match="col">
    <colspec>         
        <xsl:apply-templates/>
    </colspec>
</xsl:template>

<xsl:template match="thead">
    <thead>                       
        <xsl:apply-templates />
    </thead>
</xsl:template>

<xsl:template match="tbody">
    <tbody>                      
        <xsl:apply-templates/>
    </tbody>
</xsl:template>

我得到的结果是:

文字文本文本文字文字文字文本文本行>文字文字文字文字行>

THEAD 和 TBODY 应该在 colgroup 中与 COL 元素处于同一级别,但我似乎无法让它合作。

【问题讨论】:

除了 Alochi 的回答之外,您的模板似乎都没有得到匹配,如果匹配“colgroup”,则输出应包含“tgroup”元素,但事实并非如此如果你的输出是准确的。您的实际 html 输入是否包含 xmlns="http://www.w3.org/1999/xhtml" 形式的命名空间声明? 您如何进行转换以及如何查看输出?如果您将输出发送到任何类型的 HTML 引擎,那么它将尝试重新组织表格以使其成为 HTML 有效的。 【参考方案1】:

您正在生成 HTML 输出。在 HTML 中,colgroup 只包含 col 元素,而不包含 thead 或 tbody 元素。您的输出器正在为您修复 HTML。

如果您不希望这种情况发生,请不要让您的输出器生成 HTML。

【讨论】:

这种转换实际上是将 HTML 文件转换为 XML。在 HTML 文件中,表格根据需要显示在 colgroup 标记中的 thead 和 tbody 中。输出方法设置为 XML。 某事正在将其写入 HTML。看看也没有&lt;/th&gt;&lt;/td&gt; 标签。那不是 XML。 但可能是开始时的 HTML 到 XML 步骤将 thead 和 tbody 带出 colgroup。无论哪种方式,HTML 的无效性都是您的问题。 ...抱歉,我错误地复制并粘贴了输出,并忘记将空格放在末尾标签中,因此它们被转义了。我编辑了我的帖子。我将尝试修复 HTML(我运行一个转换脚本以从 XML 转换为按该顺序排列的 HTML)以查看有效的 HTML 是否会阻止它破坏。 Alohci,感谢您的回复。当我更改 HTML 文件以按有效顺序输出元素时,我现在能够按照我需要它们的 XML 顺序匹配它们。我不知道为什么它没有早点出现在我身上!现在,我必须弄清楚如何只让 thead 和 tbody 工作的“应用模板”调用而不是它们的模板? (我认为)

以上是关于XSLT 表在输出中乱序的主要内容,如果未能解决你的问题,请参考以下文章

fluentd 丢失毫秒,现在日志消息在 elasticsearch 中乱序存储

来自 CKAsset 的图像在 Swift 中乱序加载

js数组乱序输出 数组乱序排列

为啥 XSLT 默认输出所有文本?

Algs4-1.1.36乱序检查

使用 XSLT 输出 XML 结构