xml - XSLT 检查 xml 元素是否存在,否则跳过父元素
问题描述
如果子元素不存在,我一直在尝试跳过特定的父元素。我是 XSLT 映射的新手。如果我在某个地方出错,请纠正我。
下面是我有的xml
<element1>
<element2>
<element3>
<data1>aaaa</data1>
<data2>bbbb</data2>
<element4>
<data3>cccc</data3>
<data4>dddd</data4>
</element4>
</element3>
</element2>
<element2>
<element3>
<data1>eeee</data1>
<data2>ffff</data2>
</element3>
</element2>
</element1>
我想检查元素 4 是否存在,否则我想完全跳过元素 2。
预期结果是
<element1>
<element2>
<element3>
<data1>aaaa</data1>
<data2>bbbb</data2>
<element4>
<data3>cccc</data3>
<data4>dddd</data4>
</element4>
</element3>
</element2>
</element1>
我一直在尝试使用以下 xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<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="/element1/element2[element3/element4 = '']"/>
</xsl:stylesheet>
解决方案
您当前的模板匹配将仅匹配一个element2
如果element3/element4
存在且其值为空字符串。也就是说,它会匹配这个......
<element2>
<element3>
<element4 />
</element3>
</element2>
要检查存在(或不存在),您需要做的是......
<xsl:template match="/element1/element2[not(element3/element4)]"/>
推荐阅读
- python - 使用 python 请求检查登录是否正确
- mysql - 哪个数据类型用于在 varchar 以外的列中插入从 10,000 到 100,000 的数据
- c# - 如何在绑定到数据表的 WPF 中的 DataGrid 中实现粘贴操作?
- excel - 将第 10 行冻结到 D 列
- zooming - MapBox 样式在低缩放级别隐藏点
- android - Android ConstraintLayout:相对于垂直邻居视图扩展内部 Scrollview
- java - Spring Boot 集成测试 MockBean 零交互
- python - 如果找到模式,则从列表中返回项目
- python - 选择 A 列的值以 B 列的值开头的行
- progress-bar - 在 tf.function 修饰函数中将张量转换为整数值?