XSL 交叉引用

2024-01-31

我现在正在学习 XSL,有一个关于交叉引用的问题。 我的目标 XML 文件的结构如下:

<XML>
    <Model>
        <packedElement typ="class" id="1"/>
        <packedElement typ="class" id="2"/>
        <packedElement typ="class" id="3"/>
    </Model>
    <Elements>
        <Element idref="1">
            <Attributes comment="comment 1."/>
        </Element>
        <Element idref="2">
            <Attributes comment="comment 2."/>
        </Element>
        <Element idref="3">
            <Attributes comment="comment 3."/>
        </Element>
    </Elements>
</XML>

我想连接 id=idref。我的目标是列出所有 PackedElements 并打印他们的评论。 你们能帮我吗?

我尝试用按键功能解决这个问题,但不太成功。

Edit:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" encoding="UTF-8"/>

<xsl:key name="CommentK" match="Element" use="@idref"/>


<xsl:template match="XML">
<XML>
<xsl:apply-templates/>
</XML>
</xsl:template>

<xsl:template name="Start" match="packedElement">
<xsl:variable name="TEST" select="@id"/>
<xsl:variable name="Comment">
<xsl:call-template name="FindComment">
<xsl:with-param name="test2" select="@id"/>
</xsl:call-template>
</xsl:variable>
<content comment="{$Comment}" id ="{@id}" test="{$TEST}"></content>
</xsl:template>

<xsl:template name="FindComment">
<xsl:param name="test2"/>

<xsl:for-each select="key('CommentK', '$test2')">

<xsl:value-of select="Attributes/@comment"/>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

XSLT 版本是 2.0。 (顺便说一句,有人可以告诉我 .XSLT 和 .XSL 之间的区别吗?)


Try

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="el-by-idref" match="Elements/Element" use="@idref"/>

<xsl:template match="XML">
  <xsl:copy>
    <xsl:apply-templates select="Model/packedElement"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="Model/packedElement">
  <content comment="{key('el-by-idref', @id)/Attributes/@comment}" id="{@id}" test="{@id}"/>
</xsl:template>



</xsl:stylesheet>

这样你就得到了

<XML>
   <content comment="comment 1." id="1" test="1"/>
   <content comment="comment 2." id="2" test="2"/>
   <content comment="comment 3." id="3" test="3"/>
</XML>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSL 交叉引用 的相关文章

随机推荐

  • C中使用的括号及其用途

    如果之前有人问过这个问题 我很抱歉 但我是 C 的初学者 我想知道是否有人可以帮助解释一下 下面的代码中的括号 我从在线教程中获取了它 它运行得很好 但有一部分我不明白 include
  • SingleProducerConstrained 和 MaxDegreeOfParallelism

    在 C TPL 数据流库中 SingleProducerConstrained 是 ActionBlocks 的优化选项 当只有单个线程提供操作块时可以使用 如果一个区块只会被一个生产者在某个时间点使用 time 这意味着一次只有一个线程会
  • iText:PdfTable单元格垂直对齐

    我正在尝试将标题单元格文本垂直对齐到单元格高度的中间 这是我的代码 PdfPCell c1 new PdfPCell cerate phrase regular bold c1 setHorizontalAlignment Element
  • Open GL 对于 2d 卡牌游戏来说太过分了吗?

    我只是有一个创建纸牌游戏的想法 我只是在考虑是否使用 OpenGl 还是 CoreAnimation 你能告诉我使用 OpenGL 来制作 2D 纸牌游戏是否有点过分了 谢谢 在不了解更多情况的情况下很难说 不过 您可以使用 CALayer
  • 使用 Python 客户端 API 在 Google Cloud Pub/Sub 中运行同步拉取

    我找不到立即返回Python 客户端 API 中的标志 有什么具体原因吗 是否有另一种方法可以从 Python 中的订阅中同步提取排队消息 谷歌不提供这样的东西 但是您可以通过实现自己的队列轻松解决这个问题 from Queue impor
  • Nuxt js - SSR页面重复组件

    我正在生成一个带有组件列表的简单静态页面 当我从另一个页面访问该页面时 它会正确呈现所有内容 当我直接登陆页面时 某些组件会在页脚之后再次呈现 如果我检查该元素 我可以看到它们是相同的元素 但在页脚之后再次呈现 任何人都知道为什么会发生这种
  • 仅保存 Outlook 邮件项目的真实附件

    我目前正在开发一个 Outlook 插件 它将邮件项目和附件保存在我的 MSSQL 数据库中 我有一个方法可以保存 MailItem 及其所有附件 但是 如果我保存所有附件 则 MailItem 中的嵌入图像也会保存 有谁知道如何拯救所有r
  • 使用JPA2时如何对EJB进行单元测试?

    您将如何对使用 JPA 的 EJB 进行单元测试 例如 如果我有一个 Order 实体和 OrderEJB 它应该计算订单总数 如下定义 我将如何在不接触数据库的情况下对 EJB 进行单元测试 另外 您将如何定义实体的值 以便可以断言预期的
  • 如何在 MPMoviePlayerController 中显示字幕

    我构建了一个自定义视频播放器 所有按钮都可以使用 我需要知道当视频具有该选项时 MPMoviePlayerController 显示字幕的代码是什么 我没有在任何地方找到示例或知道该字幕按钮背后的代码的人 我在哪里可以找到这个 您将必须实现
  • Eclipse 找不到我的 Android 4.1.2 设备

    我正在尝试仅运行介绍 Hello World 我的手机 Droid Razr Maxx 上的应用程序正在使用 Eclipse 运行 android 4 1 2 jelly bean 我启用了 USB 调试 尝试更新手机驱动程序 重新安装驱动
  • 如何在 Python (2.6) 中将 JSON 解码为 str 而不是 unicode? [复制]

    这个问题在这里已经有答案了 我有一个 JSON 格式的配置文件 其中包含一些字符串变量 始终为 ascii 这些字符串默认解码为 un icode 但由于我必须将这些变量传递给我的 Python C 扩展 所以我需要它们作为普通的 Pyth
  • 我可以在 Javascript 中抛出异常来停止 Javascript 执行吗?

    我尝试模拟一个问题 从外部 url 加载的脚本会停止执行我的网站上的任何其他脚本 我尝试通过调用不退出的函数来模拟这样的问题 我可以在 firebug 中看到错误 但页面上的不同脚本仍然执行 JavaScript 中是否存在不同类型的错误
  • 8086 汇编中的大二进制移位?

    我有一个 512 字节长的二进制数据块 我想知道如果我想将其右移一次 最有效的方法是什么 我现在最好的猜测 对于汇编来说非常新 是我必须首先检查一个块 可能是 int 看看它将移出什么 移出 然后携带先前 int 移出的任何内容并继续携带这
  • Java:如何计算从InputStream读取的字节数而不事先分配完整内存

    我有一个 Java 后端 用户可以将文件上传到其中 我想将这些上传的文件限制为最大大小 并希望在上传时检查上传的字节数 并在达到限制后立即中断传输 目前 我在分配之前使用 InputStream available 来确定估计大小 但这似乎
  • 在 Elixir 中引用管道值

    我想计算字符串中单词出现的次数 实现是有问题的 但让我们用它来演示我的问题 def count sentence do words String split sentence occurrences Enum map words fn w
  • python read() 从 stdout 比逐行读取慢得多(啜饮?)

    我有一个 python SubProcess 调用 它运行一个可执行文件并将输出通过管道传输到我的子进程标准输出 在 stdout 数据相对较小 约 2k 行 的情况下 逐行读取和作为块读取 stdout read 之间的性能相当 其中 s
  • 使用 Select-String 在 powershell 中检查两个 .txt 文件

    我对编写 powershell 脚本完全陌生 到目前为止 我使用普通批次来达到我的目的 因为这是我公司的要求 在此批处理中 我使用嵌套的 foo 循环来比较两个 txt 文件 具体来说 我想要执行以下操作 文件 1 包含大量字符串 每个字符
  • 我可以保留“未使用的CSS选择器”吗?

    我注意到 svelte 会自动清除我的 css 所有 未使用的 css 选择器 都将被删除 例如 p class blue This is a paragraph p 红色 类的样式将被删除 如何保留 blue 选择器 我想稍后某个时候使用
  • 在大屏幕上将 n-div 放在一起,在小屏幕上将 n-div 放在彼此下面

    我正在努力实现这个效果 如果屏幕足够大 我想将 n div 彼此相邻放置 否则将一个放在彼此下方 并且我希望将这些 n div 包含在一个 div 中 我的代码中的黄色容器 和标题区域 在我的代码中为黑色 封装所有内容的包装器中的黄色容器
  • XSL 交叉引用

    我现在正在学习 XSL 有一个关于交叉引用的问题 我的目标 XML 文件的结构如下