递归连接父属性

2023-11-29

给定以下 XML:

<package>
    <node name="a">
        <node name="b"/>
        <node name="c"/>
        <node name="d">
            <node name="e"/>
            <node name="f"/>
            <node name="g">
                <node name="h"/>
            </node>
        </node>    
    </node>
</package>

我基本上想在连接树的同时压平树name每个父母的属性node元素直到最后一个node元素:

<package>
    <node name="a-b"/>
    <node name="a-c"/>
    <node name="a-d-e"/>
    <node name="a-d-f"/>
    <node name="a-d-g-h"/>
</package>

到目前为止我所做的工作是正确生成所有内容的平面列表node使用模板的元素和xsl:copy-of:

<xsl:template match="//node">
    <xsl:copy-of select="current()"/>
</xsl:template>

这给了我:

<package>
    <node name="b"/>
    <node name="c"/>
    <node name="e"/>
    <node name="f"/>
    <node name="h"/>
</package>

但我不确定如何从这里正确继续。我的目的是扩展模板并使用xsl:attribute and xsl:for-each连接并修改属性:

    <xsl:template match="node/@name">
        <xsl:attribute name="name">
            <xsl:for-each select="ancestor::node">
                <xsl:if test="position() > 1">.</xsl:if>
                <xsl:value-of select="@name"/>
            </xsl:for-each>
        </xsl:attribute>
    </xsl:template>

但是,这仅打印node的数据(如果有)。 我在这里缺少什么?

我有 XSLT 2.0 可用,我从中得到了灵感那么问题.


我基本上想在连接名称时压平树 每个父节点元素的属性,直到最后一个节点元素:

这是一个完整且有效的 XSLT 2.0 解决方案:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

  <xsl:template match="node[*]"><xsl:apply-templates/></xsl:template>

  <xsl:template match="node[not(*)]/@name">
    <xsl:attribute name="name" select="string-join(../ancestor-or-self::node/@name, '-')"/>
  </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<package>
    <node name="a">
        <node name="b"/>
        <node name="c"/>
        <node name="d">
            <node name="e"/>
            <node name="f"/>
            <node name="g">
                <node name="h"/>
            </node>
        </node>
    </node>
</package>

产生了想要的正确结果:

<package>
   <node name="a-b"/>
   <node name="a-c"/>
   <node name="a-d-e"/>
   <node name="a-d-f"/>
   <node name="a-d-g-h"/>
</package>

II. XSLT 1.0 解决方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

  <xsl:template match="node[*]"><xsl:apply-templates/></xsl:template>

  <xsl:template match="node[not(*)]/@name">
    <xsl:attribute name="name"><xsl:apply-templates select="." mode="gen"/></xsl:attribute>
  </xsl:template>

  <xsl:template match="node/@name" mode="gen">
    <xsl:apply-templates select="../parent::node/@name" mode="gen"/>
    <xsl:if test="../parent::node">-</xsl:if>
    <xsl:value-of select="."/>
  </xsl:template>
</xsl:stylesheet>

当此转换应用于同一个 XML 文档(如上)时,会产生相同的正确结果:

<package>
   <node name="a-b"/>
   <node name="a-c"/>
   <node name="a-d-e"/>
   <node name="a-d-f"/>
   <node name="a-d-g-h"/>
</package>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归连接父属性 的相关文章

  • 为 XSD 中的元素指定命名空间

    我有一个 XML 需要为其生成 XSD 我的 XML 如下 实例
  • 将 XML 映射到 C# 中的类

    我希望使用 XmlSerializer 对象将嵌套元素中的多个 XML 属性映射到单个 POCO 类中 XML
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • 通过 XML 将重复事件添加到 Google 日历

    我正在尝试通过协议 API 将重复事件添加到我的日历中 我从在 Google 界面中创建的事件中获取了重复标记的语法 并将其用于我的创建请求中 这是我提交的内容
  • JavaFX 中的 fx:id 和 id: 有什么区别?

    也许是一个真正的新手的问题 我开始通过阅读以下教程在 FMXL 应用程序中使用场景生成器学习 JavaFX http docs oracle com javase 8 javafx get started tutorial fxml tut
  • 单元测试报告的 XML 格式规范(DTD、XSD..)

    许多工具为单元测试报告生成和使用相同的 XML 文件格式 例子 source http junitpdfreport cvs sourceforge net junitpdfreport src resources examples tes
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 如何在另一个 XML 中使用 CDATA 中包装的 XML 进行 XSL 转换?

    XML 文档包含另一个 XML 元素 该元素包装在 CDATA 中 包装的 XML 如何用于 XSL 和 XSL FO 转换 版本 1 如果您愿意采取多个转型步骤 那么这是可能的 使用disable output escaping输出相关部
  • xsd 类型的 JAXB(取消)编组:xsd:base64Binary 和 xsd:hexBinary

    JAXB 映射两者xsd base64Binary and xsd hexBinary类型为byte 鉴于我有一个模式 一个 DOM 元素来表示这些类型 例如
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • Yii2 速率限制 API

    我担心 Yii2 速率限制 api 什么是速率限制 api 为什么使用它 这里有一些方法来自Yii2yii 大师能否用简单的话解释一下这些方法 我应该在何时何地在我的 api 中使用速率限制 public function getRateL
  • 如何改变变量赋值的较低索引?

    我想对具有较低索引的变量进行赋值 这就是我想做的 int i logic 63 0 data i someCalculatedNumber data 63 i 8 h0 我知道这不会编译 完成这项任务的最佳方法是什么 如果您希望将 LSB
  • 快速获取服务器时间

    有没有办法让服务器时间与 swift 我想根据服务器设置静态时间 这样 即使用户更改时区和日期 也没关系 视图控制器上显示的时间将是基于服务器的时间而不是 NSDate let today NSDate println today 目前 如
  • 对 pandas 列的多个子集高效运行回归分析

    我本可以选择一个较短的问题 只关注这里的核心问题 即列表排列 但我带来的原因统计模型 and pandas问题是 可能存在用于逐步回归的特定工具 同时具有存储所需回归输出的灵活性 就像我将在下面向您展示的那样 但效率更高 至少我希望如此 给
  • Json.net - 填充字典时如何保留字典值引用?

    我想从 JSON 文件填充字典中包含的对象 同时保留对象引用本身 Json net 关于 PreserveReferencesHandling 的文档明确指出 如果类型实现 System Runtime Serialization ISer
  • 是否有一个 java 类用于使用日期构造 cron 表达式?

    我需要根据表单中的用户输入构建一个 cron 表达式 所以我有一个日期选择器和一个选择框来选择频率 我可以很容易地从中构建一个 cron 表达式 但感觉就像我在重新发明轮子 有适合我的课程吗 类似方法的东西 public String cr
  • 检测键控状态变化

    我是数据流编程模型的新手 在思考我认为应该是一个简单的用例时遇到一些困难 我有一个从 Pub Sub 读取实时数据的管道 该数据包含带有 简化的 序列号和状态 UP 或 DOWN 的设备状态 保证设备至少每 5 分钟发送一次其状态 但设备当
  • 如何获取从最后一个匹配到文件末尾的行?

    需要打印最后一个匹配之后到文件末尾的行 比赛的数量可以是任意的 并且是不确定的 我有一些文字 如下所示 MARKER aaa bbb ccc MARKER ddd eee fff MARKER ggg hhh iii MARKER jjj
  • 如何在varchar中查找5位数字?

    基本上我只需要得到一个由空格分隔的 5 位数字 5 位数字可以位于 varchar 中的任何位置 示例 我有一个 varchar 列 其中包含 SQL 2008 表中的各种数据 travel visa 34322 LLL001 Coffee
  • 更改 .each() 在 Firefox 和 chrome 中的顺序

    我有一个返回 JSON 编码数据数组的 Web 服务 然后我使用 jQuery 的 each 函数来迭代该数组 但在 Firefox 中它向下迭代 而在 Chrome 中它向上迭代 从网络服务返回的数据是 data 610 id 610 u
  • 整数的scanf获取字符时如何处理异常

    当输入是字符时 下面的简单程序将给出无限循环 尽管它意味着区分字符和数字 如何测试是否scanf使用返回值获取应该是数字的字符scanf include
  • while 循环中更改的标签不会更新 UI

    运行此代码时 using System using System Collections Generic using System Linq using System Text using System Windows using Syst
  • php中require和require_once之间的区别[重复]

    这个问题在这里已经有答案了 require 和 require once 之间的区别 我只是想知道其中的区别 而不是 php 中的警告和致命错误 require 包含并评估特定文件 同时require once 仅当之前未包含该内容 在同一
  • 删除“购物车为空时无法结帐”。 WooCommerce 中的通知

    我应该添加什么代码functions php删除 购物车为空时无法结账 Woocommerce 中的通知 我在中找到了代码包括 wc template functions php负责显示此消息 When on the checkout wi
  • 将特定位图图像颜色转换为透明

    我目前正在重新创建我的图像资源管理器应用程序 该应用程序以前是在 Windows 窗体中编写到 Windows 演示框架中的 我的 WinForms 应用程序使用 DanielPe alba 的 WindowsThumbnailProvid
  • 如何使用 Powershell 从 XML 中删除特殊/坏字符

    我有一个 XML 文件 我想从下面的文件中删除这些十六进制字符错误是无效字符 我不知道 STX 是什么意思 当我尝试将其复制到剪贴板并将其粘贴到 MS Work 中时 它显示了一些其他值 如何在 powershell 中编写脚本以从 XML
  • 在 R 中应用成本函数

    我正处于 R 机器学习的初级阶段 我很难相信没有包可以解决不同类型回归算法的成本函数 例如 如果我想求解逻辑回归的成本函数 手动方法如下 https www r bloggers com logistic regression with r
  • 在两个列表上使用 java 流进行左连接

    主类的最佳描述这是课程描述的图片我有一个包含 cid cname 和 aid 的实体客户 另一个包含 help 城市和州的实体地址 我已经在两个不同的列表 list 和 list 中获取了两个实体的数据 我想要一个结果列表 客户和地址上的左
  • Android 2.3.3中的Http get请求

    我需要发送方面的帮助HTTP GET要求 我的代码如下 URL connectURL new URL url HttpURLConnection conn HttpURLConnection connectURL openConnectio
  • 递归连接父属性

    给定以下 XML