Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 删除XSL匹配后的下一个元素 要删除的内容。 不要移除这个。_Xslt - Fatal编程技术网

Xslt 删除XSL匹配后的下一个元素 要删除的内容。 不要移除这个。

Xslt 删除XSL匹配后的下一个元素 要删除的内容。 不要移除这个。,xslt,Xslt,我想在带有role=“removethis”的注释之后直接删除该元素。 在上面的例子中 <remark role="removethis"/> <para>Content to be removed.</para> <para>Don't remove this.</para> 要删除的内容。 将被删除。 要删除的元素不必是段落。它可以是屏幕、程序列表等 我认为使用下面的兄弟姐妹可以做到这一点(见下文)。但这与下面所有的兄弟姐妹都匹

我想在带有role=“removethis”的注释之后直接删除该元素。 在上面的例子中

<remark role="removethis"/>
<para>Content to be removed.</para>
<para>Don't remove this.</para>
要删除的内容。
将被删除。 要删除的元素不必是段落。它可以是屏幕、程序列表等

我认为使用下面的兄弟姐妹可以做到这一点(见下文)。但这与下面所有的兄弟姐妹都匹配

<para>Content to be removed.</para>

您的方法有两个问题:

  • 备注[@role='removethis']::以下同级
    不是有效的XPath表达式

  • 在定位步骤中不能使用
    后面的同级轴。除了
    子对象
    属性
    之外的任何轴都只能在谓词中使用

  • 请尝试:

     <xsl:template match="remark[@role = 'removethis']::following-sibling"/>
    
    
    


    也许有一个更简单的方法来解决这个问题,但你只是给我们展示了一部分图片

    “我认为使用以下同级可以做到这一点(见下文)。但这会匹配以下所有同级。”不,它会产生一个错误。请看这里:匹配的元素可能并不总是para。@mikey因此将
    para
    替换为
    *
    。或者(最好)使用可能出现在该位置的元素列表。这意味着:匹配任何类型的第一个元素,其中前面的同级是备注role=“removethis”。我不明白self子句是如何使用的。对不起,我通常不需要构造这样复杂的匹配表达式。这对我来说是高级的东西。如果用
    *
    替换
    para
    ,则意味着匹配任何元素,其前一个同级元素是
    备注,其
    角色
    属性等于字符串“removethis”。
    <xsl:template match="para[preceding-sibling::*[1][self::remark[@role='removethis']]]"/>