愚蠢且可能很简单的 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>
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
。
对于名称不同且位于命名空间中的模板(例如<xsl:template name="ex:main" xmlns:ex="http://example.com/">
),如果您需要在命令行中将其拼写出来,那么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
产量:<?xml version="1.0" encoding="UTF-8"?> <root xmlns:xs="http://www.w3.org/2001/XMLSchema"> Hello, World! It's simple text that I cannot see.</root>
以上是关于愚蠢且可能很简单的 XSL 问题的主要内容,如果未能解决你的问题,请参考以下文章