|
|
1
3
dsteinweg 让我走上正轨。..我最终做了:
|
|
2
3
这种转换忽略任何<b>没有任何节点子级的元素。在此上下文中,节点是指元素、文本、注释或处理指令节点。 <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="b[not(node()]"/>
</xsl:stylesheet>
请注意,这里我们使用了最基本的XSLT设计模式之一——使用 identity transform 并为特定节点覆盖它。 覆盖模板将仅为名为“b”且没有子节点的节点选择。此模板为空(没有任何内容),因此其应用程序的效果是忽略/丢弃匹配节点,并且不会在输出中再现。 这种技术非常强大,广泛用于此类任务,也用于重命名、更改内容或属性、向任何可以匹配的特定节点添加子节点或兄弟节点(除命名空间节点外的任何类型的节点都可以用作<xsl:template/>的“match”属性中的匹配模式); 希望这能有所帮助。 干杯, 迪米特尔·诺瓦切夫 |
|
|
3
2
我想知道这是否可行?
|
|
4
1
看看这是否可行。
|
|
5
1
另一种选择是采取以下措施:
|
|
|
6
1
你可以把所有的逻辑放在谓词中,并设置一个模板来只匹配你想要的,然后删除它:
这假设您稍后在转换中有一个身份模板,听起来像是这样。这将自动复制任何带有内容的“b”标签,这就是您想要的:
编辑: 现在像Dimitri一样使用node(),如下所示。 |
|
7
0
如果您有权更新原始XML,可以尝试使用 xml:space=保留 论根元素
这样,空的空间<b></b>标签被保留,因此可以与<b/>在XSLT中。
|
|
|
J_Cus504 · 在单匹配语句中使用身份变换和多谓词来沉默节点 1 年前 |
|
|
Daniel · 合并插入文本的直接兄弟元素 1 年前 |
|
JTennessen · Saxon XSLT输出中的额外换行符 1 年前 |
|
|
Velsus · XSLT尝试使用xsl:if排除某些记录,但不起作用 1 年前 |
|
|
Reto · XSLT 3.0突发流-如何存储/获取另一个分支的值 1 年前 |
|
|
badbee · 使用xsl:sort时保留未排序元素的问题 1 年前 |
|
|
Tronics · 尝试读取xml元素中的数据 2 年前 |
|
Abhishek Nayak · xslt仅对所选节点进行排序 2 年前 |