将XSLT应用于XML文件

Mat*_*hid 15 xslt

我意识到我可能会后悔在我的余生中询问这个问题,但是......有没有办法将XSLT应用于XML文件, XML文件没有明确引用XSLT文件?

就个人而言,我觉得整个 XSLT的是,你可以将几个不同的转换到同一个原始的XML文件,从它产生多种不同的结果.但是,如果必须在源XML文件中指定转换,那么这确实不起作用.似乎要改变转换,你必须改变底层的原始数据文件,这似乎是错误的......

那么有没有办法创建某种文件,说"采用这种XML和这种XSLT并在浏览器窗口中呈现结果"?

编辑:

也许我的问题不清楚.

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

Dim*_*hev 17

有没有一种方法可以将XSLT应用于XML文件,而XML文件没有明确引用XSLT文件?

当然.事实上,XSLT规范完全不依赖(提及)XML文件,该文件具有对XSLT样式表的引用来处理它.

因此,可以通过许多不同的XSLT转换处理相同的XML文件.

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

怎么做到这一点

简短回答:这是依赖于实现的 - 阅读相应的XSLT处理器文档(例如,XslCompiledTransform for .NET,Saxonica for Saxon,...等).

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

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

这将调用MSXML 3处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '3.0' -t %param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

这将调用MSXML 4处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '4.0' -t %param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

这将调用MSXML 6处理器:

msxsl.exe %xml% %xsl%  -o %out% -u '6.0' -t %param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

这将调用.NET XslCompiledTransform:

nxslt2.exe %xml% %xsl% -t  -o %out% %param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

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

 AltovaXML.exe -xslt1 %xsl% -in %xml% -out %out%%param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

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

 AltovaXML.exe -xslt2 %xsl% -in %xml% -out %out%%param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

这会调用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\"]%
Run Code Online (Sandbox Code Playgroud)

这将调用XQSharp(XSLT 2.0):

XSLT.exe -s %xml% -o %out% -r 1 -t   %xsl% %param[ name="value"]%
Run Code Online (Sandbox Code Playgroud)

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

%param[ name="value"]%name = value参数规范列表,这不是必须使用的.


Ser*_*sky 0

对的,这是可能的。所有 XSL-T 实现都有 API 来对 XML 文件执行 XSL-T 转换。