xslt - 将 XSLT 应用于 XML 文件

标签 xslt

我意识到我可能会后悔在余生中问这个问题,但是...是否有某种方法可以将 XSLT 应用于 XML 文件 XML 文件没有显式引用到 XSLT 文件?

就我个人而言,我认为 XSLT 的全部要点是您可以对同一个原始 XML 文件应用多种不同的转换,从而从中产生多种不同的结果。但如果必须在源 XML 文件中指定转换,那么这实际上不起作用。似乎要更改转换,您必须更改底层原始数据文件,这似乎是错误的......

那么有没有办法创建某种文件来表示“获取此 XML 和此 XSLT 并在浏览器窗口中呈现结果”?

编辑:

也许我的问题不清楚。

如果我打开记事本,编写一个 XML 文件,并在其中提及 XSLT 文件的名称,那么当我双击该 XML 文件时,Web 浏览器将应用指定的 XSLT。有什么方法可以说服浏览器在不更改原始 XML 文件的情况下执行此操作吗?或者我是否将被迫寻找命令行 XSLT 处理器?

最佳答案

Is there some way of applying XSLT to an XML file without the XML file having an explicit reference to the XSLT file?

当然。事实上,XSLT 规范根本不依赖(提及)引用 XSLT 样式表的 XML 文件来处理它。

因此,同一个 XML 文件可以由许多不同的 XSLT 转换来处理。

在 XSLT 2.0 及更高版本中,XSLT 转换甚至不需要应用相应的 XML 文档。

如何做到这一点

简短的回答:这取决于实现 - 阅读相应的 XSLT 处理器文档(例如,.NET 的 XslCompiledTransform、Saxona 的 Saxonica,...等)。

此外,几乎每个 XSLT 处理器都有一个命令行实用程序,用于从控制台窗口调用转换 - 再次检查相应的文档( msxsl.exe for MSXML ,用于 XslCompiledTransform 的 nxslt.exe,...等)

以下是我正在使用的 XSLT 处理器的一些命令行:

这会调用 MSXML 3 处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '3.0' -t %param[ name="value"]%

这会调用 MSXML 4 处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '4.0' -t %param[ name="value"]%

这会调用 MSXML 6 处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '6.0' -t %param[ name="value"]%

这将调用 .NET XslCompiledTransform:

nxslt2.exe %xml% %xsl% -t  -o %out% %param[ name="value"]%

这会调用 XSLT 10 的 AltovaXML (XML-SPY):

 AltovaXML.exe -xslt1 %xsl% -in %xml% -out %out%%param[ name="value"]%

这会调用 XSLT 2.0 的 AltovaXML (XML-SPY):

 AltovaXML.exe -xslt2 %xsl% -in %xml% -out %out%%param[ name="value"]%

这将调用 Saxon 9.x(对于 XSLT 2.0):

java.exe -Xms512M -Xmx512M  -jar C:\xml\Parsers\Saxon\Ver.9.1.0.5\J\saxon9.jar   -t  -repeat:1 -o %out%  %xml%  %xsl%  %param[ name=\"value\"]%

这将调用 XQSharp (XSLT 2.0):

XSLT.exe -s %xml% -o %out% -r 1 -t   %xsl% %param[ name="value"]%

在上述所有内容中,%xml% 是 XML 文件的路径,%xsl% 是主 XSLT 文件的路径,% out% 是将包含转换输出的文件的路径。

%param[ name="value"]%name = value 参数规范的列表,这不是强制使用的。

关于xslt - 将 XSLT 应用于 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297282/

相关文章:

xslt - xsl for-each-group 的迭代顺序是否一致?

xml - 如何从 XSLT 中的 xml 文件中删除额外的 xml 声明?

XSLT 的优化

php - 使用 php Xpath 更新 xml 文件

xslt - 如何对 xsl :copy? 中的所有非选定属性执行 apply-templates

xslt - 如何在XPath中使用starts-with()、contains()和ends-with()来查找xml节点innertext?在 XPATH 1.0 中

xml - 由于 xmlns 导致的 XSL 转换问题

xml - 如何过滤具有某个子节点的节点

xml - 匹配特定父节点XSLT的特定子属性

xml - 使用 XSLT 转换 XSLT 时保留实体引用