XSLT 2.0根据位置和名称删除同级节点

时间:2018-10-18 10:29:50

标签: xslt xpath

我有时会在xml文件(命名空间tei)中显示以下内容:

<tei:p>some text</tei:p><tei:add>some note</tei:add>

我的目标是仅在<add/>之后的下一个同级元素中删除<p>,而不删除文件中可能出现的其他<add/>元素。

我已经在XSLT 2.0中进行了尝试,但是没有效果:

<xsl:template match="tei:add[preceding-sibling::node()[1][local-name()='p']]"/>

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您显示的代码示例应该起作用,但前提是procedure cocktailShakerSort( A : list of sortable items ) defined as: do swapped := false for each i in 0 to length( A ) - 2 do: if A[ i ] > A[ i + 1 ] then // test whether the two elements are in the wrong order swap( A[ i ], A[ i + 1 ] ) // let the two elements change places swapped := true end if end for if not swapped then // we can exit the outer loop here if no swaps occurred. break do-while loop end if swapped := false for each i in length( A ) - 2 to 0 do: if A[ i ] > A[ i + 1 ] then swap( A[ i ], A[ i + 1 ] ) swapped := true end if end for while swapped // if no elements have been swapped, then the list is sorted end procedure p之间没有空格(例如换行)(因为文本也被视为节点)

如果您要在它们之间有一个空白节点,而您要忽略该空白节点,则一种解决方案是通过在XSLT中使用add从XML中仅去除空白节点

strip-space

或者,您可以更改模板匹配以说明空白节点

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

如果您之间永远不能有非空白节点,则可以将其更改为此

 <xsl:template match="tei:add[preceding-sibling::node()[self::* or normalize-space()][1][local-name()='p']]"/>