XSLT 和临时文档

2024-04-23

我正在尝试处理一个 xml 文件,该文件有几个不同的状态组,例如

<root>
<childgroup>16</childgroup>
<setstate>init</setstate>
<child1>...</child1>
<child2>...</child2>
<setstate>process<setstate>
<child2>...</child2>
<child3>...</child3>
.....
<childgroup>17</childgroup>
...

我需要的是实际上得到类似的东西

<childgroup no="16">
  <state statename="init">
    <child1>...</child1>
    <child2>...</child2>
  </state>
  <state statename="process">
    <child2>...</child2>
    <child3>...</child3>
  </state>
</childgroup>
<childgroup no="17">
...

以下是如何一步使用 XSLT 1.0 进行分组的示例;样式表

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

  <xsl:output indent="yes"/>

  <xsl:key name="k1" match="root/*[not(self::childgroup)]" 
    use="generate-id(preceding-sibling::childgroup[1])"/>

  <xsl:key name="k2" match="root/*[not(self::childgroup) and not(self::setstate)]"
    use="concat(generate-id(preceding-sibling::childgroup[1]), '|', generate-id(preceding-sibling::setstate[1]))"/>

  <xsl:template match="root">
    <xsl:copy>
      <xsl:apply-templates select="childgroup"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="childgroup">
    <childgroup no="{.}">
      <xsl:apply-templates select="key('k1', generate-id())[self::setstate]"/>
    </childgroup>
  </xsl:template>

  <xsl:template match="setstate">
    <state statename="{.}">
      <xsl:copy-of select="key('k2', concat(generate-id(preceding-sibling::childgroup[1]), '|', generate-id()))"/>
    </state>
  </xsl:template>

</xsl:stylesheet>

变换输入样本

<root>
  <childgroup>16</childgroup>
  <setstate>init</setstate>
  <child1>...</child1>
  <child2>...</child2>
  <setstate>process</setstate>
  <child2>...</child2>
  <child3>...</child3>
  <childgroup>17</childgroup>
  <setstate>init</setstate>
  <child1>...</child1>
  <child2>...</child2>
  <setstate>process</setstate>
  <child2>...</child2>
  <child3>...</child3>
</root>

into

<root>
   <childgroup no="16">
      <state statename="init">
         <child1>...</child1>
         <child2>...</child2>
      </state>
      <state statename="process">
         <child2>...</child2>
         <child3>...</child3>
      </state>
   </childgroup>
   <childgroup no="17">
      <state statename="init">
         <child1>...</child1>
         <child2>...</child2>
      </state>
      <state statename="process">
         <child2>...</child2>
         <child3>...</child3>
      </state>
   </childgroup>
</root>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 和临时文档 的相关文章

随机推荐

  • R 中迄今为止的整数数据框[重复]

    这个问题在这里已经有答案了 我有一个包含 10 个日期的数据框 我将其作为整数读入 R 这是数据框 19820509 19550503 20080505 19590505 19940517 19690504 20050420 2006050
  • Card.io 不扫描非凸起数字信用卡

    我在使用 card io sdk 扫描非凸起数字信用卡时遇到问题 我在card io的官方网站上没有看到关于这个问题的任何解释 这个 SDK 只适用于高位信用卡吗 来自card io 的杰夫 简而言之 是的 该 SDK 仅适用于高位信用卡
  • 从 IntelliJ Ultimate 外部运行时,Tomcat 的“服务器日志”在哪里?

    当运行我的Vaadin https en wikipedia org wiki Vaadin app on Tomcat https en wikipedia org wiki Apache Tomcat8 5 外部来自IntelliJ h
  • python:将 Firefox 与 selenium 一起使用时禁用下载弹出窗口

    我有一个使用 selenium 和 firefox 来自动执行下载操作的脚本 问题是每当我运行脚本时 即使我在 Firefox 首选项中设置了下载路径 我总是会从 Firefox 中弹出 不断询问我想要执行什么类型的操作 我检查了文件和文件
  • 用多态性替换条件式

    我试图通过一个例子来理解这种干净的代码实践 考虑具有折扣开关盒的类产品 我正在尝试用多态性替换 switch 语句 代码之前 class Product String priceCode int discount Product Strin
  • 数据集是否应该在企业级 Web 应用程序中使用?

    因此 我之前的一个项目中有一位架构师反对数据集 他讨厌它们 并说它们在网络应用程序中没有地位 特别是在拥有大量流量的网络应用程序中 我注意到在我接管的许多代码实例中数据集的使用相当频繁 他们真的那么糟糕 性能杀手吗 我是否应该考虑删除大量使
  • 如何更改 apache Spark Worker 每个节点的内存

    我正在配置 Apache Spark 集群 当我运行具有 1 个主服务器和 3 个从服务器的集群时 我在主监视器页面上看到以下内容 Memory 2 0 GB 512 0 MB Used 2 0 GB 512 0 MB Used 6 0 G
  • 动画图像的饱和度

    是否可以随着时间的推移对图像 例如 png 的饱和度进行动画处理 例如从灰度到全彩 另外如果我可以使用插值器 我已经看到了 EffectFactory 和 ColorMatrix 类 但我无法将它们与动画 过渡结合起来 例如 应用灰度饱和度
  • 仅复制和粘贴可见单元格

    我需要复制一列可见单元格并粘贴到下一列 我找不到有效的宏 我尝试了一下 但它只复制了一些数字 这是代码 Sub TryMe Sheet1 Range A1 A100 SpecialCells xlCellTypeVisible Copy D
  • 何时在模态视图控制器上设置父/呈现视图控制器?

    我正在展示一个模态视图控制器 在该模态视图控制器中viewDidLoad 我似乎找不到任何对父级 VC 的引用 parentViewController presentingViewController等等 如果尚未设置 我该如何获得对它的
  • 如何知道用户是否在设置中禁用或删除工作配置文件?

    我正在尝试查看工作配置文件更新时设备状态是否更新disabled or deleted在客户端通过设置 在客户端进行更改 禁用和删除后 statusenterprise devices get API 返回的仍然是ACTIVE 有没有办法知
  • 为什么我不能在 Java 8 lambda 表达式中引发异常? [复制]

    这个问题在这里已经有答案了 我升级到 Java 8 并尝试用新的 lamdba 表达式替换通过 Map 的简单迭代 该循环搜索空值 如果找到则抛出异常 旧的 Java 7 代码如下所示 for Map Entry
  • 将导航栏切换按钮向右对齐

    我正在尝试 Bootstrap 4 更具体地说是导航栏菜单 有没有办法让小导航栏切换按钮对齐到页面的右侧 而不是让它浮动到徽标旁边的左侧 这是我当前的代码 media min width 992px navbar nav li a line
  • GAE 中的拉取队列是否表现出一致的 FIFO 行为?

    App Engine 中的推送队列通常是先进先出队列 https developers google com appengine docs java taskqueue overview push The Rate of Task Exec
  • SQL 日期转换结果为“无效的数字格式模型参数”。

    我必须select一些数据来自Oracle 11g数据库 但我似乎不明白为什么以下select查询失败 SELECT INFO ID INFO DETAIL IMPORTANT FLG DELETE FLG CREATE TIME DISP
  • OpenCL:在内核中手动引发异常

    是否可以在 OpenCL 中手动引发异常 仅用于调试目的 我的代码中有一个非常奇怪的错误 当我计算两个双精度值并将它们相加时 主机报告 CL OUT OF RESOURCE 但是 如果我不添加这两个值 主机不会报告任何错误 OpenCL 不
  • 如何使用下面定义的类?

    class A public B b class B public A a 我不能在 A 类 B b 中写入 因为 B 类定义如下 有什么办法让它发挥作用吗 thanks 这不可能 您需要在其中一个类中使用指针或引用 class B for
  • Sql 异常:管道的另一端没有进程

    我无法从 C 代码访问我的 sql 服务器连接 我收到此错误 Sql 异常 管道的另一端没有进程 这是我的 app config 中的连接字符串
  • 如何在JavaFX中使用Node类的intersect()方法?

    JavaFX Node 类提供了两种相交方法 intersects Bounds localBounds and intersects double localX double localY double localWidth double
  • XSLT 和临时文档

    我正在尝试处理一个 xml 文件 该文件有几个不同的状态组 例如