使用 XSLT 删除节点后消除空行

2024-01-10

我正在使用 XSLT 在 XML 文档中进行非常简单的转换。我只想删除所有具有特定名称的元素节点。 碰巧在我的源文档中,所有这些节点都位于文档的末尾,但是在转换之后,虽然这些节点按照我的预期消失了,但在它们的位置上有很多空行。

这严格来说是一个装饰问题,因为我通过转换完成了我想要的事情,但出于好奇:我怎样才能摆脱这些空行? 这是我用于转换的 XSL 文件(我想要删除的元素名为“关系”):

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />

  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="relation"/>

</xsl:stylesheet>

原因在于纯空白文本节点是已删除元素的直接兄弟节点.

Solution:只需添加此 XSLT 指令即可删除任何纯空白文本节点——甚至在转换开始之前:

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

结果可能会丢失缩进——如果是这样,请添加以下内容:

 <xsl:output omit-xml-declaration="yes" indent="yes"/>

完整的转变变成:

<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="*">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="relation"/>
</xsl:stylesheet>

当应用于此 XML 文档时(没有提供!):

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>

  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
</nums>

产生了想要的正确结果(没有尾随空格):

<nums>
   <num>01</num>
   <num>02</num>
   <num>03</num>
   <num>04</num>
   <num>05</num>
   <num>06</num>
   <num>07</num>
   <num>08</num>
   <num>09</num>
   <num>10</num>
</nums>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XSLT 删除节点后消除空行 的相关文章

随机推荐

  • 当结果依赖于前面的单元格时,如何将函数应用于数组的每个元素

    我有一个数组 a np array 2 3 5 8 3 5 计算每个结果元素所在数组的最有效 向量化 方法是什么 伪代码 result 0 a 0 for i gt 0 result i result i 1 a i result i 1
  • Node js http服务器请求正文作为流可读

    我正在使用 node js 编写一个 http 服务器 但无法将请求正文隔离为可读的流 这是我的代码的基本示例 var http require http fs require fs http createServer function r
  • MVC 模式中简单登录的组件职责是什么

    我试图理解 MVC 模式 我得到的一般想法是模型负责维护状态 视图负责显示模型 控制器负责修改模型并调用适当的视图 我想尝试实现一个简单的 ASP NET MVC 登录页面 该页面使用OpenID http www openid net以便
  • Qt:从多个测试类运行单元测试并汇总所有测试类的输出

    Qt 自带QTest 还有一些文档 例如 官方教程 http doc qt io qt 5 qttestlib tutorial1 example html 然而 QTest鼓励您将单元测试组织为单独的可执行文件 为此有一个特殊的宏 它生成
  • 连接具有不同列顺序的数据帧[重复]

    这个问题在这里已经有答案了 我正在解析 Excel 文件中的数据以及结果的列DataFrame可能会也可能不会与底座对齐DataFrame我想在哪里堆叠几个已解析的DataFrame 让我们调用DataFrame我从数据中解析A 和基数Da
  • 稳定基线3库中的“确定性= True”是什么意思?

    我正在尝试应用稳定的baselines3库中的PPO算法https stable baselines3 readthedocs io en master https stable baselines3 readthedocs io en m
  • 在 Android Studio 中设置用于单元测试的自定义资产目录

    我们对 Android 应用程序执行单元测试的要求并不少见 这些测试使用仅单元测试所需的资源 对于基于 Eclipse 的 SDK 这非常简单明了 测试项目是一个单独的项目 有自己的资产文件夹 对于 Android Studio 这意味着可
  • 创建一个有组织的 Java 库

    我想用 Java 创建一个库 Jar 文件 其中包含我们使用的数据库的所有方法 那里大约有 60 个方法 所以我想让它更有条理 我想调用像下面提供的示例那样的方法 db accounts add username password or d
  • Angular - 模块 AppModule 导入了意外值 MatDialog

    我正在尝试将 Angular Material 集成到 Angular 中 但出现以下错误 程序编译成功 但在浏览器中出现此问题 Uncaught Error Unexpected value MatDialog imported by t
  • 滚动时更改不透明度

    我的目标是在向下滚动时更改 DIV 的不透明度 过渡顺利很重要 当 的时候scrollTop主体的透明度为 400 Test div 的不透明度应为 1 当 的时候scrollTop主体的透明度为 800 Test div 的不透明度应为
  • Java 中的 pow(x,y)

    有什么区别 Math pow x y x y To x y x y 我会更喜欢使用x y with double输入数字 或者我必须始终使用 shellMath pow method is the 按位异或 http en wikipedi
  • 在文本框上过滤 DataGrid

    我搜索示例或示例以通过文本框筛选 WPF DataGrid 列元素 类似的东西this http www codeproject com KB WPF wpf datagrid filter aspx 给定的示例使用WPF工具包 显然被微软
  • Phonegap NFC 在两个设备之间发送和读取数据

    我正在尝试使用 ionic Angular 应用程序中的phonegap nfc 在两个支持 NFC 的设备之间发送信息 仅文本 到目前为止 我能够连接设备并且 Ndef 事件监听器捕获标签 但标签中的信息始终相同 它不会给我发送的消息 我
  • 按值对字典键进行排序,然后按字母顺序对具有相同值的键进行排序

    我知道标题中没有很好地解释 所以我会尽力在这里做得更好 我想按字典的键各自的值对它们进行排序 然后按字母顺序对具有相同值的所有键进行排序 最好不使用模块 最好的方法是什么 python 是否会自动执行此操作 如下所示 sorted dict
  • Azure 资源管理器模板 HostingEnvironment

    我从azure gallery下载了Web App MySQL的arm模板 https gallery azure com artifact https gallery azure com artifact 20151001 Microso
  • bash 获取文件的父目录

    如何获取文件的父目录 我希望它对所有类型的名称都是安全的 path to my file absolute path to my file rf no preserve root whatever test zip symbolic lin
  • TRUNCATE 和 DELETE 之间的区别? [复制]

    这个问题在这里已经有答案了 TRUNCATE and DELETE命令执行相同的工作 在这两种情况下都对数据进行操作 那么为什么DELETE命令属于 DML 命令并且TRUNCATE命令属于 DDL 命令吗 DELETE DELETE 是一
  • Jenkins 发现找不到 ssh 密钥 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当我以 jenkins 用户身份登录时 我在 ssh id rsa pub 中有一个 ssh 密钥 我已将其正确导入到 bitbucket 中 并且它
  • 从头开始水平视差滚动 - 无插件 (jQuery)

    有谁知道我是否可以找到有关如何通过js表单scratch 即无插件 进行水平视差滚动的教程 或者可以给我一个例子 我花了很多时间谷歌搜索 但只能找到使用插件的教程 我想从头开始做的原因是因为我想完美地理解视差的真正工作原理 我不介意使用jQ
  • 使用 XSLT 删除节点后消除空行

    我正在使用 XSLT 在 XML 文档中进行非常简单的转换 我只想删除所有具有特定名称的元素节点 碰巧在我的源文档中 所有这些节点都位于文档的末尾 但是在转换之后 虽然这些节点按照我的预期消失了 但在它们的位置上有很多空行 这严格来说是一个