愚蠢且可能很简单的 XSL 问题

Posted

技术标签:

【中文标题】愚蠢且可能很简单的 XSL 问题【英文标题】:Silly and Likely Simple XSL Issue 【发布时间】:2021-10-29 08:04:25 【问题描述】:

我使用此代码的目标是使用 XSL 解析平面文件,到目前为止,我阅读的大多数建议都涉及使用基于 XSL 3 的模板作为其自己的源。但是,我什至无法使用 xsl:value-of 指令显示基本文本,更不用说访问任何其他功能了。

我知道这可能是一个愚蠢的错误,但请接受它。

我正在使用最新的 Saxonica 10.5 HE 运行带有以下命令行选项的工作表:

java -jar ~/Documents/SaxonHE10-5J/saxon-he-10.5.jar -s:LinesToXml.xsl -xsl:LinesToXml.xsl

我的源 XSL 是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="3">
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" doctype-public="yes"/>
    
    <xsl:template name="xsl:initial-template" >
        <root>
        <xsl:text>&#xA;Hello, World! It's </xsl:text>
        <xsl:value-of select="'simple text that I cannot see.'" />
        </root>
    </xsl:template>

</xsl:stylesheet>

我得到的输出是:

<?xml version="1.0" encoding="UTF-8"?>
Hello, World! It's 

【问题讨论】:

【参考方案1】:

我想您根本不想提供带有 -s 的 XML 源,而是仅使用提供 XSLT 文件的 -xsl 选项和额外的原始 -it 选项运行 Saxon 以开始使用初始模板进行处理你已经命名为xsl:initial-template

对于名称不同且位于命名空间中的模板(例如&lt;xsl:template name="ex:main" xmlns:ex="http://example.com/"&gt;),如果您需要在命令行中将其拼写出来,那么https://www.saxonica.com/html/documentation10/using-xsl/commandline/ 建议使用-it:urllocalname,例如-it:http://example.com/main。如果花括号在您的命令外壳中有意义,您将需要找到一种方法来逃避花括号。

【讨论】:

我使用了命令行:java -jar ~/Documents/SaxonHE10-5J/saxon-he-10.5.jar -xsl:LinesToXml.xsl -it:xsl\:initial-template 我得到了错误:Error XTDE0040 Template ./xsl:initial-template does not exist Template ./xsl:initial-template does not exist 我也尝试在 xsl:initial-template 中不转义冒号,得到了同样的错误。 -it 不需要显式命名初始模板,如果它是名为 xsl:initial-template 的模板。如此原始的-it 就足够了。 先生,你摇滚。 java -jar ~/Documents/SaxonHE10-5J/saxon-he-10.5.jar -xsl:LinesToXml.xsl -it 产量:&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;root xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt; Hello, World! It's simple text that I cannot see.&lt;/root&gt;

以上是关于愚蠢且可能很简单的 XSL 问题的主要内容,如果未能解决你的问题,请参考以下文章

XSL:when - 应用多个属性

如何在C中划分愚蠢的大数字

使用 xsl 获取文件名

尝试选择节点时如何在 xsl 中使用变量?

与 Xsl 连接

Java+XSL合并多个XML文件