我有时会在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']]"/>
感谢您的帮助。
答案 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']]"/>