gpt4 book ai didi

xml - 使用 XSL 生成在同一脚本中执行的动态 XSL?

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:05 27 4
gpt4 key购买 nike

我想动态创建具有动态名称的变量以供以后在我的转换中使用,但为此我需要动态生成 XSL,然后在同一脚本中运行它。

这只是我正在寻找的粗略伪代码示例。

      <xsl:for-each select="//constants/constant" >
<xsl:variable >
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="select">
<xsl:value-of select="@value"/>
</xsl:attribute>
</xsl:variable>
</xsl:for-each>

我可以使用 XSL 动态构建 XSL 以稍后在同一脚本中运行吗?

注意:我们的 XML 通过运行 CL XSL 转换引擎的批处理进行转换;因此,仅在 XSL 文档中引用 XSL 样式表不是一种选择。

最佳答案

XSLT 有一个特殊的内置功能,支持生成输出,这就是 XSLT 本身。

这是 <xsl:namespace-alias> XSLT 指令。

如解释者 the XSLT 1.0 Spec .:

"

<!-- Category: top-level-element --><xsl:namespace-alias  stylesheet-prefix = prefix | "#default"  result-prefix = prefix | "#default" />

样式表可以使用 xsl:namespace-alias元素来声明一个命名空间 URI 是另一个命名空间 URI 的别名。当一个文字命名空间 URI 被声明为另一个命名空间 URI 的别名时,结果树中的命名空间 URI 将是文字命名空间 URI 作为别名的命名空间 URI,而不是文字命名空间 URI 本身。 xsl:namespace-alias元素声明命名空间 URI 绑定(bind)到 stylesheet-prefix 指定的前缀属性是绑定(bind)到 result-prefix 指定的前缀的命名空间 URI 的别名属性。因此,stylesheet-prefix属性指定将出现在样式表中的 namespace URI,以及 result-prefix属性指定将出现在结果树中的相应 namespace URI。"

这是一个生成 xsl:stylesheet 的转换的小例子包含 xsl:variable , 以所需方式构建:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx" > <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/> <xsl:template match="/*">  <xxx:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  <xxx:variable name="{@name}">    <xsl:value-of select="."/>  </xxx:variable> </xxx:stylesheet> </xsl:template></xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<v name="myVarName">myValue</v>

产生了想要的结果:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    <xsl:variable name="myVarName">myValue</xsl:variable></xsl:stylesheet>

然后下一步将在您的“脚本”中启动这个动态生成的 XSLT 转换

关于xml - 使用 XSL 生成在同一脚本中执行的动态 XSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com