带有文本输出的 XSLT 空白控件

Posted

技术标签:

【中文标题】带有文本输出的 XSLT 空白控件【英文标题】:XSLT whitespace control with text output 【发布时间】:2022-01-08 04:36:18 【问题描述】:

使用 xsltproc,如果格式化程序需要通过插入空格来像这样使用 CDATA 周围的格式,我如何输出没有周围空间的 CDATA 部分?不需要使用 xsl:text。我也尝试过 xsl:value-of,但不知道如何在 xsl:value-of 中使用 CDATA。 (我可以删除 CDATA 周围的空间,但格式化程序只是将其添加回来)。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent='no' />
    <xsl:strip-space elements="*" />

    <xsl:template match="/">
        <xsl:text>
            <![CDATA[/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
]]>
        </xsl:text>
        <xsl:text>
            <![CDATA[/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
]]>
        </xsl:text>
    </xsl:template>

</xsl:stylesheet>

输出

jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$ xsltproc test.xsl test.xsl

            /*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/

        
            /*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/

        jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$ 

期望的输出

jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$ xsltproc test.xsl test.xsl
/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$ 

这个解决方案有效,我的错误是认为文本需要在 CDATA 中才能让格式化程序不理会它。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent='no' />
    <xsl:strip-space elements="*" />

    <xsl:template match="/">
        <xsl:text>/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
</xsl:text>
        <xsl:text>/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
</xsl:text>
    </xsl:template>

</xsl:stylesheet>

【问题讨论】:

为什么有 CDATA 部分?如果你想控制空格和缩进xsl:text是工具。 【参考方案1】:

这个解决方案有效,我的错误是认为文本需要在 CDATA 中才能让格式化程序不理会它。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent='no' />
    <xsl:strip-space elements="*" />

    <xsl:template match="/">
        <xsl:text>/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
</xsl:text>
        <xsl:text>/*
*    Licensed under the Apache License, Version 2.0 (the "License");
*/
</xsl:text>
    </xsl:template>

</xsl:stylesheet>

【讨论】:

以上是关于带有文本输出的 XSLT 空白控件的主要内容,如果未能解决你的问题,请参考以下文章

使用带有新行的 XSLT 将 XML 转换为文本

报告查看器控件(Web)显示空白报告

如何使用 XSLT 将 base64 编码的文本加载到 XML 文档中?

源文件中的长文本字符串,导致输出文件中出现多行

在php中从头开始创建带有文本的透明png

ASP.NET TextBox 控件在后台带有标签文本