使用 Xpath 选择每个节点和兄弟节点(直到该节点下一次出现)组合

2024-02-18

我有以下 html 结构:

<document>
<ol>a question</ol>
<div>answer</div>
<div>answer</div>
<ol>another question</ol>
<div>answer</div>
<ol>question #3</ol>
...
</document>

我想采取<ol>节点和以下<div>直到下一个节点<ol>节点,所以我可以将它们分组在 xml 中,例如

<vce>
  <topic>
   <question> ... </question>
   <answer> ... </answer>
  </topic>
  ...
</vce>

到目前为止我有以下内容

<xsl:for-each select="//body/ol">
  <document>

    <content name="question">
      <xsl:value-of select="." />
    </content>

    <content name="answer">
      <xsl:for-each
        select="./following-sibling::div !!! need code here !!!>
        <xsl:value-of select="." />
      </xsl:for-each>
    </content>
  </document>
</xsl:for-each>

我很好地回答了问题,但我很难回答。我尝试过使用以下,之前,不,for-each-group,...。有很多类似的问题,但不能像这样使用这种格式退出,因为我的 html 文件中实际上没有子父结构。


试试这样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="answers" match="div" use="generate-id(preceding-sibling::ol[1])" />

<xsl:template match="/document">
    <vce>
        <xsl:for-each select="ol">
            <topic>
                <question>
                    <xsl:value-of select="." />
                </question>
                <xsl:for-each select="key('answers', generate-id())">
                    <answer>
                        <xsl:value-of select="." />
                    </answer>
                </xsl:for-each>
            </topic>
        </xsl:for-each>
    </vce>
</xsl:template>

</xsl:stylesheet>

当应用于以下测试输入时:

XML

<document>
   <ol>question A</ol>
   <div>answer A1</div>
   <div>answer A2</div>
   <ol>question B</ol>
   <div>answer B1</div>
   <ol>question C</ol>
   <div>answer C1</div>
   <div>answer C2</div>
</document>

结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<vce>
   <topic>
      <question>question A</question>
      <answer>answer A1</answer>
      <answer>answer A2</answer>
   </topic>
   <topic>
      <question>question B</question>
      <answer>answer B1</answer>
   </topic>
   <topic>
      <question>question C</question>
      <answer>answer C1</answer>
      <answer>answer C2</answer>
   </topic>
</vce>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Xpath 选择每个节点和兄弟节点(直到该节点下一次出现)组合 的相关文章

随机推荐

  • 德摩根规则解释

    你能解释一下吗德摩根规则 https en wikipedia org wiki De Morgan 27s laws尽可能简单 例如对于只有中学数学背景的人 布尔代数概述 我们有两个价值观 T and F 我们可以通过三种方式组合这些值
  • Crontab - 每 3 小时重新启动 apache [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 由于访问者滞后 我的服务器目前遇到了一些问题 我认为最好的解决方案是每 2 3 小时左右重新启动 apache我如何通过 cronjob 来做到这一点
  • PHP image卷积() 在左上角留下黑点

    我正在尝试使用以下代码锐化调整大小的图像 imageconvolution imageResource array array 1 1 1 array 1 16 1 array 1 1 1 8 0 当透明PNG图像被锐化时 使用上面的代码
  • 将变量从自定义服务器传递到 NextJS 中的组件

    我已经在 NextJS 中设置了一个自定义服务器 如图所示here https github com zeit next js custom server and routing用于自定义路由 服务器 js app prepare then
  • 在networkx图上显示边权重

    我有一个包含 3 列的数据框 f1 f2 和分数 我想绘制一个图表 使用 NetworkX 来显示节点 在 f1 和 f2 中 和边缘值作为 分数 我能够用节点及其名称绘制图表 但是 我无法显示边缘分数 有人可以帮忙吗 这是我到目前为止所拥
  • mPDF自动打印问题

    我正在使用 php 类 mpdf 它可以很好地生成 PDF 我试图让文件在渲染时自动打印 即打开打印对话框 我使用下面的代码扩展了核心功能 将 JavaScript 添加到 pdf 中 pdf 已渲染 但没有自动打印 任何帮助都会很棒 谢谢
  • 如何在 Gitlab CI 的构建脚本中设置(环境)变量?

    我有一个虚拟构建脚本Gitlab CI pwd ci app path pwd echo INFO current directory ci app path 当系统开始构建过程时 我得到以下输出 pwd home kai gitlab r
  • 打开以http开头但不以www开头的链接

    我想打开以 www 开头的链接 但他们打不开 我的代码仅适用于http 请帮助 gt 我是 iOS 新手 我将非常感激 BOOL webView UIWebView webView shouldStartLoadWithRequest NS
  • DateTime.UtcNow 提前 4 小时

    我看到了一些关于如何纠正这个问题的答案 我有一个 DateTime 类型的对象 我已分配该对象 如下所示 obj TimeStamp DateTime UtcNow 我似乎无法找到正确的组合或代码操作来获得正确的日期和时间 它总是比当前时间
  • python:在交互模式下忽略前导“>>>”和“...”?

    许多在线 python 示例显示交互式 python 会话 每行前面都有正常的前导 gt gt gt 和 字符 通常 如果不获取这些前缀 就无法复制此代码 在这些情况下 如果我想在复制后将此代码重新粘贴到我自己的 python 解释器中 我
  • Android上的“覆盖”尺寸可以与谷歌地图一起缩放吗?

    我已经能够使用 MapActivity 和 ItemizedOverlay 通过 Eclipse 在 Android 上的谷歌地图上绘制叠加层 但是当地图放大和缩小时 叠加层的大小不会改变 我希望叠加层 固定 在地图上 并随地图一起放大和缩
  • GWT 错误:“gwt-module.dtd”中有“1”错误

    我正在学习 GWT 并尝试运行它沃盖拉的教程 https www vogella com tutorials GWT article html 在 Windows 10 和 JDK 11 上使用 Eclipse GWT 插件 3 0 我在第
  • 如何使用 hasNextInt() 捕获异常?我需要 Int 但如果输入是字符,那就不好了

    我一直在尝试阻止异常 但我不知道如何阻止 我试过parseInt java util NormalExceptionMismatch etc 有谁知道如何解决这个问题 由于复制和粘贴 格式有点不对 do System out print H
  • 快速检查 3D Touch 是否可行

    在我的应用程序中 我将显示设置 只有当设备支持 3D Touch 时 这些设置才应该可见 目前我检查设备是否有ios9 if available iOS 9 0 问题是 例如 iPhone 6 有 iOS 9 但没有 3D Touch 如何
  • 在64位linux上安装python 32位

    我基本上有两个问题 如何在 Linux 上安装 32 位 python 和 64 位 python 如何修复因以下失败尝试而损坏的系统 我只是尝试在 linux mint 16 上安装 32 位 python 和 64 位 python 它
  • Docker 上的 Airflow - 路径问题

    使用气流我尝试简单的 DAG 工作 我编写了自定义运算符和其他文件 我想将它们导入到 DAG 逻辑所在的主文件中 这里是文件夹的结构 airflow cfg dags init py dag py sql statements sql do
  • Young GC导致Metaspace增加,而不是Old Gen

    从 JDK7 迁移到 JDK 8 时 我开始看到频繁的 Full GC GC 延迟更高 分析gc后发现 young GC后 metaspace使用量增加 而old gen使用量保持不变 我已将最大元空间大小 等于 JDK7 中的 Perm
  • 属性内内联 JS 的 CSP 哈希或随机数

    内容安全策略的新手 所以不确定这是否可能 但想知道如何为 HTML 元素的属性中的某些内联脚本添加哈希或随机数 例如
  • 如何完全序列化/反序列化 RSAParameters 对象

    The RSAParameters对象不支持私钥数据的序列化 如何完整地序列化和反序列化私钥 以下代码可用于序列化和反序列化RSAParameters对象 使用您自己选择的序列化器 using System using System Run
  • 使用 Xpath 选择每个节点和兄弟节点(直到该节点下一次出现)组合

    我有以下 html 结构