HTML到CALS表?

HTML到CALS表?,第1张

概述我正在检查是否有人将XSLT转换为将 HTML表格转换为CALS.我发现了很多关于其他方式(CALS到HTML)的材料,但不是来自HTML.我以为有人可能会这样做,所以我不必重新发明轮子.我不是在寻找一个完整的解决方案.只是一个起点. 如果我自己走得足够远,我会发布它以供将来参考. 我提出了一个比@Flack链接到的更简单的解决方案: <xsl:stylesheet xmlns:xsl="http 我正在检查是否有人将XSLT转换为将 HTML表格转换为CALS.我发现了很多关于其他方式(CALS到HTML)的材料,但不是来自HTML.我以为有人可能会这样做,所以我不必重新发明轮子.我不是在寻找一个完整的解决方案.只是一个起点.

如果我自己走得足够远,我会发布它以供将来参考.

解决方法 我提出了一个比@Flack链接到的更简单的解决方案:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/transform" version="1.0"><xsl:template match="tbody">    <xsl:variable name="maxColumns">        <xsl:for-each select="tr">            <xsl:sort select="sum(td/@colspan) + count(td[not(@colspan)])" data-type="number"/>            <xsl:if test="position() = last()">                <xsl:value-of select="sum(td/@colspan) + count(td[not(@colspan)])"/>            </xsl:if>        </xsl:for-each>    </xsl:variable>    <tgroup>        <xsl:attribute name="cols">            <xsl:value-of select="$maxColumns"/>        </xsl:attribute>        <xsl:apply-templates select="@*|node()"/>    </tgroup></xsl:template><xsl:template match="td[@colspan > 1]">    <entry>        <xsl:attribute name="namest">            <xsl:value-of select="sum(preceding-sibling::td/@colspan) + count(preceding-sibling::td[not(@colspan)]) + 1"/>        </xsl:attribute>        <xsl:attribute name="nameend">            <xsl:value-of select="sum(preceding-sibling::td/@colspan) + count(preceding-sibling::td[not(@colspan)]) + @colspan"/>        </xsl:attribute>        <xsl:apply-templates select="@*[name() != 'colspan']|node()"/>    </entry></xsl:template><xsl:template match="tr">    <row>        <xsl:apply-templates select="@*|node()"/>    </row></xsl:template><xsl:template match="td">    <entry>        <xsl:apply-templates select="@*|node()"/>    </entry></xsl:template><xsl:template match="td/@rowspan">    <xsl:attribute name="morerows">        <xsl:value-of select=". - 1"/>    </xsl:attribute></xsl:template><!-- fallback rule --><xsl:template match="@*|node()">    <xsl:copy>        <xsl:apply-templates select="@*|node()"/>    </xsl:copy></xsl:template></xsl:stylesheet>

有两个棘手的问题.首先,CALS表需要包含列数的tgroup / @cols属性.因此,我们需要在xhtml表中找到一行中的最大单元格数 – 但我们必须注意colspan声明,以便具有colspan>的单元格. 1创建正确数量的列!我的样式表中的第一个模板就是基于@Tim C对max cells per row problem的回答.

另一个问题是,对于多列单元格,xhtml表示“此单元格为3列宽”(colspan =“3”),而CALS将说“此单元格从第2列开始,在第4列结束”(namest =“2”nameend = “4”).该转换在样式表的第二个模板中完成.

其余的确相当简单.样式表没有处理诸如将style =“wIDth:50%”更改为wIDth =“50%”等细节,但我认为这些是相对常见的问题.

总结

以上是内存溢出为你收集整理的HTML到CALS表?全部内容,希望文章能够帮你解决HTML到CALS表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存