在同一节点上匹配不同配置的模板

2024-04-27

我问了我的整个问题这里关于堆栈溢出 https://stackoverflow.com/questions/64966059/nesting-xsl-templates-and-referring-multiple-templates-to-the-same-node,我会尝试将其切碎:

我需要从这个源创建一个 xml:非常简单:

    <?xml version="1.0" encoding="UTF-8"?>
    <FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
        <ROW>
        <EDI_DC40.TABNAM><DATA>EDI_DC40</DATA></EDI_DC40.TABNAM>
        <E1EDL20.VBELN><DATA>649758</DATA></E1EDL20.VBELN>
        <E1EDL18.QUALF><DATA>ORI</DATA></E1EDL18.QUALF>
        <E1EDT13.1.QUALF><DATA>007<DATA></E1EDT13.1.QUALF>
        <E1EDT13.2.QUALF><DATA>015</DATA></E1EDT13.2.QUALF>
        <E1EDL24.POSNR>000001</E1EDL24.POSNR>
        <E1EDL24.POSNR>2</E1EDL24.POSNR>
                (random number of these)
        <E1EDL41.QUALI>001</E1EDL41.QUALI>
        <E1EDL37.EXIDV><DATA>5650327422</DATA></E1EDL37.EXIDV>
        <E1EDL44.POSNR>000001</E1EDL44.POSNR> <!--(these are the line items, equal to the number of ROW)-->
    </ROW>
    <ROW>...

这就是我需要的:

    <DELVRY05>
        <IDOC BEGIN="1">
            <EDI_DC40 SEGMENT="1">
                <TABNAM>EDI-DC40</TABNAM>
            </EDI_DC40>
            <E1EDL20 SEGMENT="1">
                <VBELN>649758</VBELN>
                <E1EDL18 SEGMENT="1"><QUALF>ORI</QUALF></E1EDL18>
                <E1EDT13 SEGMENT="1"><QUALF>007</QUALF></E1EDT13>
                <E1EDT13 SEGMENT="1"><QUALF>015</QUALF></E1EDT13>
                <E1EDL24 SEGMENT="1">
                    <POSNR>000001</POSNR>
                    <E1EDL41 SEGMENT="1">
                        <QUALI>001</QUALI>
                    </E1EDL41>
                </E1EDL24>
                <E1EDL24 SEGMENT="1">
                    <POSNR>2</POSNR>
                    <E1EDL41 SEGMENT="1">
                         <QUALI>001</QUALI>
                    </E1EDL41>
                </E1EDL24>
                <E1EDL24 SEGMENT="1"> <!-- (random number of these, as commented above) -->
                    ...
                </E1EDL24>
            </E1EDL20>
        </IDOC>
    </DELVRY05>

这是我对 xsl 的想法:

    <xsl:template match="/*">
        <DELVRY05>
            <IDOC BEGIN="1">
                <EDI_DC40 SEGMENT="1">
                    <xsl:apply-templates select="headers"/>
                </EDI_DC40>
                <E1EDL20 SEGMENT="1">
                    <xsl:apply-templates select="main"/>
                    <xsl:apply-templates select="fm:ROW"/>
                </E1EDL20>
            </IDOC>
        </DELVRY05>
    </xsl:template>

由于行和标题都包含在 E1EDL20 标记中,因此我认为需要两个模板,并且两者都引用源代码中的相同标记。正如规范所述,仅使用最后一个模板。 (所以它会看到“标题”和“行”,但看不到“主要”:

    <xsl:template name="main" match="fm:ROW[1]"> ...

    <xsl:template name="headers" match="fm:ROW[1]"> ...

    <xsl:template name="lines" match="fm:ROW"> ...

我该如何解决这个问题?

Edit:

@塞巴斯蒂安: 您的解决方案非常适合我最初提供的源代码。很好的答案。然而,我在提供的代码中犯了一个错误,我深表歉意。

这是源代码的格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
        <ROW>
            <EDI_DC40.TABNAM><DATA>EDI_DC40</DATA></EDI_DC40.TABNAM>
            <E1EDL20.VBELN><DATA>649758</DATA></E1EDL20.VBELN>
            <E1EDL18.QUALF><DATA>ORI</DATA></E1EDL18.QUALF>
            <E1EDT13.1.QUALF><DATA>007</DATA></E1EDT13.1.QUALF>
            <E1EDT13.2.QUALF><DATA>015</DATA></E1EDT13.2.QUALF>
            <E1EDL24.POSNR>000001</E1EDL24.POSNR>
            <E1EDL41.QUALI>001</E1EDL41.QUALI>
            <E1EDL37.EXIDV><DATA>5650327422</DATA></E1EDL37.EXIDV>
            <E1EDL44.POSNR>000001</E1EDL44.POSNR>
        </ROW>
        <ROW>
            <EDI_DC40.TABNAM><DATA>EDI_DC40</DATA></EDI_DC40.TABNAM>
            <E1EDL20.VBELN><DATA>649758</DATA></E1EDL20.VBELN>
            <E1EDL18.QUALF><DATA>ORI</DATA></E1EDL18.QUALF>
            <E1EDT13.1.QUALF><DATA>007</DATA></E1EDT13.1.QUALF>
            <E1EDT13.2.QUALF><DATA>015</DATA></E1EDT13.2.QUALF>
            <E1EDL24.POSNR>2</E1EDL24.POSNR>
            <E1EDL41.QUALI>002</E1EDL41.QUALI>
            <E1EDL37.EXIDV><DATA>5650327422</DATA></E1EDL37.EXIDV>
            <E1EDL44.POSNR>000001</E1EDL44.POSNR>
        </ROW>
    </FMPDSORESULT>

挑战在于我应该有一个带有标题的标签,但行项目应该在彼此之下列出,如下所示:

    <?xml version="1.0" encoding="utf-16"?>
    <DELVRY05>
      <IDOC BEGIN="1">
        <EDI_DC40 SEGMENT="1">
          <TABNAM>EDI_DC40</TABNAM>
        </EDI_DC40>
        <E1EDL20 SEGMENT="1">
          <VBELN>649758</VBELN>
          <E1EDL18 SEGMENT="1">
            <QUALF>ORI</QUALF>
          </E1EDL18>
          <E1EDL24 SEGMENT="1">
            <POSNR>000001</POSNR>
            <E1EDL41 SEGMENT="1">
              <QUALI>001</QUALI>
            </E1EDL41>
          </E1EDL24>
          <E1EDL24 SEGMENT="1">
            <POSNR>2</POSNR>
            <E1EDL41 SEGMENT="1">
              <QUALI>002</QUALI>
            </E1EDL41>
          </E1EDL24>
        </E1EDL20>
      </IDOC>
    </DELVRY05>

谢谢你对我的包容。我非常感谢你的帮助!

多谢, 汤姆


这是一个入门示例。你的问题缺乏一些细节,有些我假设了一些规则。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fm="http://www.filemaker.com/fmpdsoresult"
    exclude-result-prefixes="fm"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <DELVRY05>
      <xsl:apply-templates select="fm:FMPDSORESULT/fm:ROW[1]"/>
    </DELVRY05>
  </xsl:template>
  
  <xsl:template match="fm:ROW">
    <IDOC BEGIN="1">
      <EDI_DC40 SEGMENT="1">
        <TABNAM><xsl:value-of select="fm:EDI_DC40.TABNAM/fm:DATA"/></TABNAM>
      </EDI_DC40>
      <E1EDL20 SEGMENT="1">
        <VBELN><xsl:value-of select="fm:E1EDL20.VBELN/fm:DATA"/></VBELN>
        <E1EDL18 SEGMENT="1"><QUALF><xsl:value-of select="fm:E1EDL18.QUALF/fm:DATA"/></QUALF></E1EDL18>
        <!-- Same principle as above for E1EDT13.1, E1EDT1.2, etc. -->
        
        <!-- Use template for elements that are present mutltiple times. -->
        <xsl:apply-templates select="../fm:ROW/fm:E1EDL24.POSNR"/>
      </E1EDL20>
    </IDOC>
  </xsl:template>
  
  <xsl:template match="fm:E1EDL24.POSNR">
    <E1EDL24 SEGMENT="1">
      <POSNR><xsl:value-of select="."/></POSNR>
      <E1EDL41 SEGMENT="1">
        <QUALI><xsl:value-of select="../fm:E1EDL41.QUALI"/></QUALI>
      </E1EDL41>
    </E1EDL24>
  </xsl:template>
  
</xsl:stylesheet>

在这里查看它的工作情况:https://xsltfiddle.liberty-development.net/6q1SDka/1 https://xsltfiddle.liberty-development.net/6q1SDka/1

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

在同一节点上匹配不同配置的模板 的相关文章

  • (不?)使用 JavaScriptSerializer 将 xml 文件(未知模式)转换为 c# 中的 json

    JavascriptSerializer 是将 xml 文件 未知模式 转换为 json 字符串的 工具 吗 这里有一些线程讨论如何在 C 中将 xml 转换为 json 以及一些推荐的专用解决方案 http www phdcc com x
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 使用 PHP simpleXML 查找一个我知道名称但不知道其所在位置的节点

    如果我知道要查找的节点的名称 但我可能不一定知道该节点的路径 我需要在 PHP 中查询 XML 字符串 我想我可以使用 xpath 做到这一点 但我无法弄清楚如何设置相对路径来查看文档中的任何位置 有人可以指出我正确的方向吗 我目前正在尝试
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 如何为Spring测试创建TestContext?

    我有一个相对较小的 Java 库 它实现了几十个 bean 没有数据库或 GUI 我创建了一个 Spring Bean 配置文件 其他 Java 项目使用该文件将我的 bean 注入到他们的东西中 我现在第一次尝试使用 Spring Tes
  • XPath 节点到字符串

    如何选择以下节点的字符串内容 span class url word b class test b span span class url word b class test2 b more words span 我尝试过一些事情 span
  • 将 xml 转换为 python 字典

    我正在尝试创建一个 dict 类来处理 xml 但陷入困境 我真的没有想法了 如果有人可以指导这个主题 那就太好了 到目前为止开发的代码 class XMLResponse dict def init self xml self resul
  • 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

    我目前正在寻找一种使用 JavaScript 从服务器 XML 响应中提取信息的简单方法 jQuery 似乎是一个很好的候选者 当谈到使用 jQuery 解析 XML 时 我不断遇到类似于以下代码片段的代码示例 function parse
  • lxml 中的通配符命名空间

    如何使用 xpath 忽略 xml 命名空间进行查询 我正在使用 python lxml 库 我尝试了以下解决方案this https stackoverflow com questions 13463871 xpath selecting
  • > 有必要吗?

    我现在开发网站和 XML 接口已有 7 年了 从来没有遇到过真正有必要使用 gt for a gt 到目前为止 所有消歧都可以通过引用来处理 lt and alone 有没有人遇到过这样的情况 与 SGML 处理 浏览器问题 XSLT 等相
  • Visual Studio 2012 T4 模板生成 XML 时出现错误

    我正在使用 Visual Studio 2012 从 T4 模板生成 XML 模板的顶部看起来像 lt template language VBv4 hostspecific True debug True gt lt output ext
  • C#.net 中的 XML 数据库

    我正在为一些网站开发WPF客户端程序 它使用 XML 数据库 我是 XML 新手 请有人解释一下如何创建 附加 最重要 编辑 读取和加密 XML 文件 我知道这是一个大问题 但是 事情很紧急 必须尽快完成工作 在网上查了一下 没有得到正确的
  • 如何让 XSLT 在 Java 中返回 UTF-8

    我正在尝试让我的 XSL 脚本使用 UTF 8 编码 像 和希腊字符这样的字符就像垃圾一样出现 让它工作的唯一方法是将结果写入文件 如果我将它写入输出流 它只会返回垃圾 System out 有效 但这可能是因为它被重定向到文件 结果需要从
  • 修改“NodeJS”上的 XML 标签

    有谁知道如何使用 NodeJS 修改 XML 文件的标签值 这是我的 XML 文件
  • XSL。评估表达

    对不起我的英语不好 XSL 1 0 如何从元素或属性值计算表达式 例如 XML
  • 就地修改 XML 文件?

    假设我有以下 XML 文件
  • 如何在sql中查询xml列

    我在 SQL Server 2008 上有一个表 T1 其中包含一个 XML 列 EventXML 我想查询某个节点包含特定值的所有行 更好的是 我想检索不同节点中的值 表T1 T1 EventID int EventTime dateti
  • 如何使 XML 文件始终在文本编辑器而不是 XML 编辑器中打开?

    我去档案协会那里没有 xml格式 当我添加它时 所有编辑器都会自动添加 并且它们是静态的 如下所示 locked by XML content type 无法删除关联 我希望每当我创建 XML 文件时 它都会用文本编辑器自动打开 请帮忙 单
  • 在针对 XSD 进行验证时,使用 DOM、StAX、SAX 解析器中的任何一个来查找 XML 中确切缺失的元素

    我有一个 XML 文件及其相应的 XSD 文件 在使用 StAX 解析器进行验证时 我附加了一个错误处理程序 基本上 我在格式良好的 XML 文件中遇到两种类型的错误 1 元素内的数据类型不正确 例如元素内的字符串应该具有整数 2 缺少元素
  • 使用 PHP 将子项添加到 XML 文件

    添加子项时 抛出此错误 无法添加孩子 父级不是 XML 树的永久成员 我无法解决这个问题 这是我的代码 if visited FIRST xml new SimpleXMLElement

随机推荐

  • 在 Kohana 3.2 视图中输出图像

    我有以下脚本将图像输出到浏览器 效果很好 file to output SERVER DOCUMENT ROOT static imgs uploads 20110318172207 16 jpg header Content Type i
  • 产生 ENOENT node.js 错误

    我已经使用express generator启动了一个node js应用程序 我有一个奇怪的问题 我无法通过浏览器查看页面两次 第一次加载正常 第二次加载失败 因为节点进程以出现以下错误 GET 304 412ms events js 72
  • 如何使用 Angular JS 处理表单中的多个提交按钮?

    我正在使用 AngularJS 并且有一个用户可以输入数据的表单 在表单的末尾 我想要有两个按钮 一个用于 保存 它将保存并转到另一页 另一个标记为 保存并添加另一个 的按钮将保存表单 然后重置它 允许他们输入另一个条目 我如何以角度实现这
  • 如何验证 SharePoint 用户凭据

    我需要从我的桌面应用程序 用 C 编写 访问共享点应用程序 我应该如何传递凭据并验证身份验证 1 将WebService引用 名称 SourceLists 添加到项目中 Web服务URL https sites vti bin lists
  • 获取当前Windows Phone 7设备的ID

    有没有一种方法可以唯一地识别我的应用程序正在运行的 Windows Phone 设备 有 Windows Phone 设备 ID 之类的吗 Try DeviceExtendedProperties GetValue DeviceUnique
  • Typescript 和 React:使用解构的事件处理程序的正确类型是什么?

    当我在 React 中使用事件处理程序时 我遇到了 Typescript 严格性的问题 具体来说 我无法使用对象解构handleClick 进行的功能onClick handleClick 属性 这是不干净的版本 它是唯一一个打字稿没有抱怨
  • 与 grep 类似地突出显示文本,但不过滤掉文本[重复]

    这个问题在这里已经有答案了 使用 grep 时 它将突出显示与正则表达式匹配的行中的任何文本 如果我想要这种行为 但同时让 grep 打印出所有行怎么办 快速浏览完 grep 手册页后 我发现一无所获 使用确认 看看它的 passthru此
  • 套接字对和一对无名管道有什么区别吗?

    我不仅想知道用户端的差异 还想知道 Linux 内核实现中的差异 共同部分 管道是单向的 因此需要两个管道才能进行双向通信 而套接字对是双向的 管道始终是面向流的 而套接字对可以是面向数据报的 套接字对正常AF UNIX套接字 这意味着辅助
  • Groovy 语言书籍/教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 PHP 中加密的内容与 Ruby 中加密的相同字符串不匹配?

    这是我的要求 我需要使用 AES 加密 包括随机 iv 对 PHP 中的字符串进行加密 对其进行 Base64 编码 然后对其进行 URL 编码 以便可以将其作为 URL 参数传递 我试图在 PHP 和 Ruby 中获得相同的结果 但我无法
  • 我应该使用 Facelets“jsfc”属性吗?

    Facelets 使用jsfc属性将 HTML 元素转换为其关联的JSF成分 这对于快速原型设计非常有帮助 因为它允许您使用可视化设计工具创建视图 然而我最近发现this http weblogs java net blog 2008 12
  • support-library-v7 上的 ClassCastException,使用版本 21

    背景 在过去的两周里 我一直将我的应用程序从 ActionBarSherlock 转移到 Google 的官方支持库 以获得 Material Design 风格 我已经更新到最新版本 21 并且包含了 v4 和 v7 My app htt
  • 是什么让 jQuery 对象在 Chrome 开发工具中显示为数组?

    我想知道 jQuery 对象如何在 Chrome 开发者工具的控制台日志中显示为数组 例如 如果我执行 a 我在控制台日志中看到的是 a a 但以下说法是错误的 var a a Array isArray a false a instanc
  • 实体框架:如何检测数据库的外部更改

    我有一个存储过程可以更改数据库中的大量数据 该存储过程是从同时使用 EF 进行数据操作的应用程序调用的 因此 我单击一个按钮 存储过程在数据库中运行 数据发生更改 并且 EF 向用户显示旧数据 有没有办法强制 DbContext 或 Obj
  • 有条件地使用文件夹大小

    我只想在大小大于特定大小时删除文件夹 不幸的是我无法达到想要的结果stat module Attempt hosts pluto tasks stat path home ik thunderbird register folder nam
  • 无法放弃 git 中的更改

    一两周前 我拿了一些文件 这些文件是我用一个简单的程序存档的find sed tar xz gpgbash 脚本 将它们全部解压 并将它们的内容放入 git 存储库中 提交 将下一个档案内容放入存储库中 提交 冲洗并重复 以便拥有一个更好的
  • 按日期顺序排列的 T-SQL 查询组(间隙和孤岛)

    我有一个这样的示例表 CREATE TABLE Aggregate vKey INT dKey INT StartTrip DATETIME EndTrip DATETIME Distance INT 像这样的一些样本数据 INSERT I
  • 如何解决大内容的角度性能问题

    我熟悉 Angular 的摘要周期以及它如何影响长列表和大模型值的性能 我只是好奇您是否有专门针对我的情况的问题的解决方法 我正在构建一个应用程序 它可能需要也可能不需要用户输入大文本 例如错误日志textarea 但由于与 2 路数据绑定
  • R Studio:更改光标颜色

    我在 R Studio 中使用 Cobalt 编辑器主题 通过更改相应的 cache css 文件对其进行了稍微调整 背景颜色是深色的 我的选择 但文本光标 鼠标指针 也是深色的 因此很难看到 在哪里或如何将鼠标指针颜色更改为例如 cach
  • 在同一节点上匹配不同配置的模板

    我问了我的整个问题这里关于堆栈溢出 https stackoverflow com questions 64966059 nesting xsl templates and referring multiple templates to t