如何在使用 xsl 生成的节点上使用 xsl:apply-templates?

2024-02-21

我有一个像这样的xml:

<span reference="1">Reference Text 1</span>
<term reference="2">Reference Text 2</term>

我需要它变成这样:

<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<i>Reference Text 2</i> <a href="2">[2]</a>

所以,基本上,如果元素reference属性是一个跨度,我们只需将其保留原样,添加class="referenceText"。但是,如果它是任何其他元素,那么我们还应该应用为此元素创建的模板。这就是为什么<term>应该成为<i>- 我有一个模板:

<xsl:template match="term">
  <i><xsl:apply-templates select="@* |node()"/></i>
</xsl:template>

对于所有元素的变换reference属性我有这个模板:

<xsl:template match="*[@reference]">

  <xsl:param name="href" select="./@reference"/>

  <xsl:choose>
    <xsl:when test="name() = 'span'">
      <span class="referenceText">
        <xsl:value-of select="."/>
      </span>
    </xsl:when>
    <xsl:otherwise>
      <xsl:element name="{name()}">
        <xsl:value-of select="."/>
      </xsl:element>
    </xsl:otherwise>
  </xsl:choose>

  <xsl:text> </xsl:text><a href="#{$href}">[<xsl:value-of select="./@href"/>]</a>

</xsl:template>

不幸的是,这会产生以下输出:

<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<term>Reference Text 2</term> <a href="2">[2]</a>

So, <term>没有转换成<i>。看起来我需要某种递归来将模板重新应用到生成的内容,但我想不出任何东西。


如果您使用的是 XSLT 1.0,则可以捕获变量中的输出,然后使用exslt:节点集 http://www.exslt.org/exsl/functions/node-set/将模板应用于变量的函数。不过,请尽量避免无限递归:)

<xsl:variable name="foo">
...
</xsl:variable>
<xsl:apply-templates select="exslt:node-set($foo)"/>

(EDIT:纳入与此答案相关的其他评论)

为了使用 EXSLT 扩展,第一步是声明其名称空间。 EXSLT 项目网站建议您在<xsl:stylesheet> node:

使用 EXSLT 中描述的扩展的第一步是为 EXSLT 模块定义相关的命名空间。您应该在样式表中的 xsl:stylesheet 元素上声明命名空间。

<xsl:stylesheet xmlns:exslt="http://exslt.org/common">
  //...
</xsl:stylesheet>

除此之外extension-element-prefixes属性可用于防止扩展名称空间添加到结果文档中:

<xsl:stylesheet xmlns:exslt="http://exslt.org/common" extension-element-prefixes="exslt">
  //...
</xsl:stylesheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用 xsl 生成的节点上使用 xsl:apply-templates? 的相关文章

  • 在 XSL 中测试 xs:decimal 的正确方法是什么?

    我试图根据传入的数据显示不同的信息 如果它是整数 我想只显示数字 如果它是小数 我想使用 0 00 模式 是的 我知道 有点混乱 但这就是开发规范 gt 对于这个特定部分 我有以下 XSL 但我无法看到 xsl when 错误消息 预期的表
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • 使用 XSL 1.0 有条件地包装内容

    我正在寻找一种用 xsl 包装内容的方法 这是我正在做的事情的简化示例 Lot s of content 是大量内容 锚标记仅用作示例 它可以是一个 div 或其他任何东西 XML
  • 使用浏览器转换XML时是否可以通过URL向XSLT传递参数?

    当使用浏览器 Google Chrome 或 IE7 转换 XML 时 是否可以通过 URL 将参数传递给 XSLT 样式表 example data xml
  • XSLT 输出不符合预期

    我需要删除父 xml 节点并复制节点内的整个 xml 我已经编写了一个 xslt 代码 但是它没有按预期工作 输入 XML
  • 解析XML文件以获取所有命名空间信息

    我希望能够从给定的 XML 文件中获取所有名称空间信息 例如 如果输入 XML 文件类似于
  • Xml、xsl Javascript 排序

    我正在寻找一种使用 javascript 对 xml 数据进行排序的方法 并希望最终过滤掉数据 我知道这一切都可以在 xsl 文件中实现 但我想在客户端进行 我已经搜索了多个使用 javascript 进行排序的地方 但其中大部分要么太特定
  • 当测试挂在无限循环中时

    我正在使用 XSLT 1 0 对字符串进行标记 并尝试防止空字符串被识别为标记 这是整个函数 基于XSLT 食谱 https rads stackoverflow com amzn click com 0596003722
  • 如何在 XSLT 中应用字母数字排序

    根据以下 XML 在 XSL 中实现字母数字排序的最佳方法是什么 Edit 澄清一下 下面的 XML 只是一个简单的示例 真正的 XML 将包含更多的变体值 使用将标签文本拆分为文本和数字部分substring before and sub
  • 合并2个XML文件并修改属性值

    我有两个 xml 文件 我想将它们合并并用一些属性进行一些算术 请提供一些想法 我正在使用标准 xslthttp informatik hu berlin de merge http informatik hu berlin de merg
  • 调试 xslt 的工具

    我有一个 Java servlet 它生成 XML 使用 XSLT 样式表对其进行翻译 然后显示生成的 HTML 这是我第一次使用 XSLT 调试 XSLT 的好方法是什么 我也有 或可以获得 一些示例 XML 文件来应用转换 但我什至不确
  • xslt 展平 DocBook para 元素中的子元素

    我正在将一些生成的 DocBook xml 来自 Doxygen 转换为我公司的 xml 这实际上是 DocBook 的子集 有一个类似如下的 para 元素
  • 来自 Java 的 Apache FOP 与 XSLT 2.0...?

    我在 Apache FOP 1 0 的嵌入式使用中使用 XSLT 2 0 的某些功能时遇到问题 特别是在使用 current group 时出现异常 我看到 FOP 正在使用 xalan 2 6 它引发了异常 我尝试排除 xalan 2 6
  • BaseX:在哪里声明要执行查询的 XML 文档

    通过 BaseX 程序 我能够使用 XPath 和 XQuery 来查询位于我的主目录中的 XML 文档 但在 XSLT 中执行相同操作时遇到问题 我查询的文档是书店Q xml https raw github com elexhobby
  • 如何在 C# 中启用 XSLT 脚本..?

    找到答案后我修改了问题的标题 P 我正在通过 C 程序加载 XML 文件和 XSL 文件并触发 XSL 转换 以下是其代码 static void Main string args Create the XslCompiledTransfo
  • XSL 递归地忽略空子级

    尝试一些古怪的方法来清理一些冗长的 XML 即递归删除所有空节点 为此 我认为如果一个节点具有 a 没有子节点 b 仅包含空白内容 c 只有 空 子节点 则该节点为 空 也就是说 我认为以下内容是 空 的 因为所有叶子都是空 仅空白节点
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • XSLT-选择以下项目直到特定标记

    假设我有这个 XML 文件
  • 加载外部 XSLT 时发生异常

    我有大量来自第三方的 XSLT 我需要用它来转换一些数据 如果我使用 xsltproc 它工作正常并按预期输出数据 我有以下 C 代码来尝试在进程中使用它 sXML 是 XML 的集合 oJob ContentTemplate 是 XSLT

随机推荐

  • Twitter Bootstrap 按钮在 Firefox 和 Chrome 中奇怪地改变渲染

    我有一个问题 我试图用我自己的颜色覆盖 twitter bootstrap v 2 0 3 主按钮 并且它在 IE 中工作正常 但在 FireFox 或 Chrome 中不起作用 因此 在我的页面上 我首先链接到 bootstrap css
  • 如何将字节数组转换为字符串[重复]

    这个问题在这里已经有答案了 我创建了一个包含两个字符串的字节数组 如何将字节数组转换为字符串 var binWriter new BinaryWriter new MemoryStream binWriter Write value1 bi
  • 快速展开的解决方法

    那么针对这个问题的回答是 Xcode 6 Storyboard Unwind Segue 与 Swift 未连接退出 https stackoverflow com questions 24029586 xcode 6 storyboard
  • 查找 3D 坐标是否已被使用的最快方法

    使用 C 和 Qt 我需要处理大量 3D 坐标 具体来说 当我收到 3D 坐标 由 3 个双精度数组成 时 我需要检查列表是否已处理该坐标 如果没有 那么我处理它并将其添加到列表 或容器 中 坐标量可能会变得非常大 因此我需要将处理后的坐标
  • 在路由定义中间使用贪婪路由参数

    我正在尝试创建遵循树导航系统结构的路线 即我想将树中的整个路径包含在我的路线中 所以如果我有一棵像这样的树 Computers Software 发展 Graphics Hardware CPU 显卡 然后我希望能够有这样的路线 site
  • 在 Spring MVC 控制器中注入 Jaxb2Marshaller

    我正在尝试将静态 xml 转换为控制器类中的 POJO 解组 我正在使用 Jaxb2Marshaller 并在我的中按以下方式进行配置根上下文
  • FactoryGirl 覆盖关联对象的属性

    这可能很简单 但我在任何地方都找不到例子 我有两个工厂 FactoryGirl define do factory profile do user title director bio I am very good at things li
  • 可以覆盖位于 jar 依赖项中的 persistence.xml 中的属性

    我有一个 java ee Web 应用程序 它使用打包为 jar 依赖项 实体类 EJB 存储库 persistence xml 的持久性单元 为了让 Web 应用程序运行一些验收测试 我需要覆盖打包的 persistence xml 中的
  • 如何将 3 位毫秒的因子转换为 R 中的日期时间?

    我这样对 t 对象进行计时 t lt c 2016 10 19 00 00 00 000 我需要转换为 POSIXct 如下所示 as POSIXct t format Y m d H M OS 2016 10 19 EDT 我失去了小时
  • 使用字典查找更新 pandas 列

    有一个数据框 df import pandas as pd import numpy as np i dog cat rabbit elephant 3 df pd DataFrame np random randn 12 2 index
  • 如何在 SQL Server 中导入 DBF 文件

    如何在 SQL Server 中导入 FoxPro DBF 文件 使用链接服务器或使用 openrowset 例如 SELECT into SomeTable FROM OPENROWSET MSDASQL Driver Microsoft
  • 协程和 while 循环

    我一直在研究沿着从 Navmesh Unity3d 获得的路径的对象移动 我正在使用协程 其中我用 while 循环控制它 正如我所展示的 public void DrawPath NavMeshPath pathParameter Gam
  • Stripe - 定期付款中包含的附加发票项目

    我在订阅中添加发票项目时遇到问题 目前我的头撞在墙上 我已经在 stripe 上创建了一个发票项目 并且我希望将发票项目包含在定期付款中 这是我的代码 它在第一张发票上添加发票项目 但不在下一张发票上添加发票项目 new customer
  • 如何自定义表单身份验证 cookie 名称?

    我有 2 个网站在不同端口的本地主机上运行 由于浏览器在发送 cookie 时不区分端口号 因此我的表单身份验证票证从一个站点发送到另一个站点 我该如何解决这个问题 我认为一个好的解决方案是更改表单身份验证票或其中一个网站 但我不知道如何执
  • 如何在浏览器刷新后保持 React 组件状态

    感谢您阅读我的第一个问题 我尝试使用react react router 和 firebase 来使用共享根进行身份验证 所以 我想保留App js的用户状态 但是当我尝试刷新浏览器时 找不到用户状态 我尝试保存到本地存储 但是有没有办法在
  • 使用 ASP.NET AJAX 和更新面板时如何处理视图状态的想法

    这是我编写的一个类 用于解决我在视图状态方面遇到的一些问题 它将信息存储在用户会话中并增加一个值来跟踪要显示的状态 困难在于不支持后退按钮 我最初这样做的原因是 在 AJAX 出现之前 视图状态被发送到客户端而不是存储在服务器上 我认为通过
  • optgroup 标签并选择不重复的选项组[重复]

    这个问题在这里已经有答案了 按类别对项目进行分组是可行的 但它不会将该类别的所有产品放在一个中optgroup但重复它 所有项目应位于一组中 而不是作为重复组分开
  • 使用 mlr3-pipelines 在 GraphLearner 中估算数据和编码因子列?

    我有一些关于 mlr3 pipelines 的使用问题 事实上 我的目标是创建一个结合三个 3 图的管道 1 处理分类变量的图表 水平插补 gt 标准化 imp cat po imputenewlvl param vals list aff
  • 创建日期和 File.Copy 问题

    我正在尝试将文件从一个目录复制到另一个目录 并根据文件创建日期进行测试 File Copy fileName directory fileNameOnly true 当我检查创建日期以确保它不超过 5 天时 我的程序稍后出现了问题 File
  • 如何在使用 xsl 生成的节点上使用 xsl:apply-templates?

    我有一个像这样的xml span Reference Text 1 span