![]() |
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中。
|
![]() |
JobProcessTask · 如何读取此xpath表达式? 2 年前 |