带有文本输出的 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 空白控件的主要内容,如果未能解决你的问题,请参考以下文章