问题标签 [msxsl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xml - 通过 xsl (msxsl) 进行 xml 转换
我需要将 xml 文件转换为 csv 文件。因此我使用的是 msxsl。xml 文件如下所示:
这意味着:有数据集“测试”具有多个节点“值”,而其他数据集则没有。
我试图用 for-each 解决这个问题:
这有效(在某种程度上),但数据集之间的列数不匹配。我需要在每个数据集中都有整个文件中每个节点的最大列数。
最后应该能够用excel打开csv文件。因此每一列都需要包含相同的数据......有什么办法吗?
谢谢!
编辑:在这种情况下,预期的 csv 输出将如下所示:
... 并不是:
xslt - 测试结果树片段
我正在尝试创建一个模板,该模板要么呈现一些内容,要么插入一个占位符以指示内容的缺失:
这很好用,直到content
是一个结果树片段:
我正在使用 Microsoft .NET XSLT 引擎,所以我可以调用msxsl:node-set()
一个参数来获得一个可行的节点集,但我不知道如何测试该参数是否需要这种处理。到目前为止,生成内容的情况较少。
有没有办法让这个模板适用于正确的节点集和结果树片段?
xslt - XSLT“key”元素的范围(根节点、上下文)
我定义了一个 XSLT 键。我需要从 for-each 循环中访问密钥,其中该循环正在处理一个节点集,该节点集超出了定义密钥的范围。
片段,我在其中标记了两行,一行有效,另一行无效:
有没有办法从 for-each 循环中访问密钥?
XSLT 1.0,msxsl 引擎。
(我想不出一种合理的方法来为此提供一个完整的工作示例。我也不确定正确的术语,例如“范围”-也许如果我知道正确的术语,我就能找到我的已经回答了。如果问题不够清楚,请告诉我,我会尝试将其编辑成更好的形状。)
xml - 如何通过命令行将绝对路径传递给 XSLT 1.0 中的参数(使用 msxsl.exe)?
我有一个由 WiX 的 heat 实用程序生成的 WXS 文件。我正在尝试使用(现有的)exclusions.xslt文件对其进行修改,以根据另一个 XML 文件的内容自动排除某些组件(我将称之为parts.xml)。xslt 文件目前用于从安装程序中删除一些组件/文件/目录,但用于相对静态的列表。
但是,就目前而言,我主要关心的是让它从参数加载和存储正确的路径并将其内容存储在变量中。
这就是应用转换的方式(一旦 WiX 完成对文件“before.wxs”的加热收集):
我传入 srcroot 作为 XSLT 文件中的一个参数,该文件将用于在用户机器上查找parts.xml 。
要从命令行获取参数并将所有反斜杠替换为正斜杠:
我从这里得到的 string-replace-all是:
我收到一个相当无用的错误:
代码:0x80004005 查询字符串中有意外字符。
但如果我只删除我发布的代码片段,错误就会消失。我不确定如何对此进行调试并弄清楚发生了什么,但在仔细阅读之后,我相信我对我认为应该发生的事情有一个根本的误解,而不仅仅是一个拼写错误或语法错误。
最终,我希望将parts.xml 的内容存储在“myparts”中。我在这里想念什么?
谢谢!
xslt - 使用 XSLT 1.0 根据引用的 XML 文件中的元素删除元素(WXS 组件/文件/等)
(对不起,这可能有点长)
我有一个由 WiX 的 heat 实用程序生成的 WXS 文件。我正在尝试使用(现有的)exclusions.xslt文件对其进行修改,以根据另一个 XML 文件的内容自动排除某些组件(我将称之为parts.xml)。xslt 文件目前用于从安装程序中删除一些组件/文件/目录,但用于相对静态的列表。
我正在转换的 WXS 文件具有 File 元素,所有这些元素都有一个“Source”属性,这是删除元素所应用的标准。
我的目标是从我的 XSLT 样式表中读取 parts.xml 文件,并使用它从我的 Wix 安装程序中排除一些元素。我们目前排除元素的方式是:
我们首先将每个元素(整个源 xml)复制过来。像这样:
然后我们使用 xsl:key 指令来标记某些项目,如下所示:
然后我们删除它们:
我想我已经到了能够将parts.xml文件读入样式表的地步:
我从这里得到了 str:tokenize 。我想我设置myOutputFiles的方式存在问题,尤其是名称空间问题,但我不完全确定如何正确执行此操作。我已将 xsi 命名空间添加到我的顶级样式表节点,但是当我打印出以下值时,这似乎没有产生任何结果:
我的下一步是以某种方式对返回的每个标记调用 <xsl:key /> 指令,以便我在上面编写的三个模板指令将删除必要的项目。但是由于 <xsl:key/> 必须是样式表中的顶级元素,所以我不确定如何才能做到这一点。
最终,一旦我得到令牌,我想遍历它们并通过以类似于上面的方式标记它们来排除它们:
然后它们将被上面的模板说明删除。')\' 前缀对于添加到令牌字符串很重要。这就是它知道只从 INSTALLDIRECTORY 节点中删除组件而不是任何子目录的方式。
我怎样才能完成这项任务?任何帮助深表感谢!
编辑:
我使用 MSXSL 作为我的处理器。我不相信它可以原生地执行 str:tokenize,但我从这里复制了模板并将其包含在我的样式表底部以供使用。除了消除 <token> 标签之外,它似乎还可以。如果我用 string="'file1 file2 file3'" 调用它并以与上面打印相同的方式打印出来,它会将“file1file2file3”输出到控制台。
以下是转换前的一些示例输入 XML:
引用的 xml 文件 (parts.xml) 看起来像(通往 Fig 的节点树很重要,但它周围还有其他元素):
图中指定的文件与要从 WXS 文件中删除的组件相关(尽管它们的路径在这里并不重要)。此参考文件基于 XML Schema 实例(schema.xsd文件),它看起来像:
以及预期的输出 XML:
file1.txt 组件现在从第一个片段中消失了,对应的 ComponentRef 在第二个片段中消失了。(路径对参考文件无关紧要。它应该只使用文件名来排除 INSTALLDIRECTORY 节点中的文件,而不是源文件的任何子目录。我想我可以只使用“substring-after-last”像这样)。
编辑2:
如果有帮助,以下是我从计划使用的各种来源中获取的一些模板:
xslt - 我可以通过 MSXSL 命令行工具运行 MSXML6 吗?
目前我已经安装了 MSXML3 和 MSXML6(它们也可以在 system32 目录中找到)。
当我使用帮助选项 -? 运行 Windows 命令行工具 MSXSL 时:我收到一条消息,指出
-u 版本使用特定版本的 MSXML:'2.6'、'3.0'、'4.0'
即使我尝试使用 '6.0' - 我也会收到错误消息。我的问题是:
是否可以将 MSXML6 与 MSXSL 命令行工具一起使用?如果是,那么如何?
javascript - 将 xsl 变量传递给 javascript 函数
使用来自 exslt.org date.msxsl.xsl的 date:difference 函数和 msxsl。如果我使用字符串文字,那么该函数可以正常工作。但是,如果我从 xml 文件中获取字符串并将它们放入变量中,然后将这些变量用于“差异”函数,则会出现以下错误:
我在这个 xsl 中做了 3 次测试。所有 3 都使用相同的日期时间字符串。
首先测试使用字符串文字调用函数。第二个测试以字符串为内容的变量调用函数。第三次测试 - 失败的测试 - 从 xml 文件中提取字符串。
那么第三次测试的变量与第二次测试的变量有什么不同呢?
如果我注释掉第三个测试的函数调用,输出如下:
TEST-1
PT2M1S
TEST-2
2011-12-13T16:15:26
2011-12-13T16:17:27
PT2M1S
TEST-3
2011-12-13T16:15:26
2011-12-13T16:17:27
xsl 文件:
输入xml文件:
谢谢
xml - XSLT 1.0 使用包含外部参数节点集
我正在尝试将特定节点(EN_PLAN_NAME)中的文本与字符串列表进行比较,因此我只能输出包含与其中一个字符串匹配的文本的节点。我尝试使用这个类似问题的答案:
输入 XML
预期输出 XML
XSLT
XSLT输出任何具有包含“健康报销安排”的文本但不输出任何包含“HRA”的节点的EN_PLAN_NAME 。我不确定我做错了什么。
c# - 怎么做
我正在使用脚本xslt
<msxsl:script language ='C#'>
<msxsl:assembly='c:\mydll.dll' />
如何动态定义 dll 的路径或配置 dll 的路径或相对路径。
我正在使用脚本xslt
<msxsl:script language ='C#'>
<msxsl:assembly='c:\mydll.dll' />
如何动态定义 dll 的路径或配置 dll 的路径或相对路径。
我正在使用脚本xslt
如何动态定义 dll 的路径或配置 dll 的路径或相对路径。
我们可以使用xslt
文件中的相对路径
路径与应用程序无关,路径与xslt
文件相关
java - 的使用带有 Java 或 JS 的元素
我有执行某些操作的自定义 Java 函数,我需要将它放到 XSL 中,以便它可以在选定节点上执行某些操作。我是这样使用的:
声明命名空间:
并致电:
这导致“无法编译样式表”错误。
还尝试用 Javascript 替换 java 代码,错误是一样的。
您知道如何正确执行此操作或其他方法如何将 Java 代码插入 XSL 并调用它吗?