Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
XML:如何使用XPath获取所有文本节点和两条处理指令之间的节点 用上面的XML,我试图抓住两个PI的中间的所有内容,并将它们封装在一个元素中,有没有办法在XSLT中实现这一点?_Xml_Xslt_Xpath - Fatal编程技术网

XML:如何使用XPath获取所有文本节点和两条处理指令之间的节点 用上面的XML,我试图抓住两个PI的中间的所有内容,并将它们封装在一个元素中,有没有办法在XSLT中实现这一点?

XML:如何使用XPath获取所有文本节点和两条处理指令之间的节点 用上面的XML,我试图抓住两个PI的中间的所有内容,并将它们封装在一个元素中,有没有办法在XSLT中实现这一点?,xml,xslt,xpath,Xml,Xslt,Xpath,我期望的输出是: <p> <?PI start?> Grab <span>all</span> these <span>text</span> nodes <?PI end?> </p> XSLT 1.0:最好编写一个递归模板,该模板从第一个PI开始,递归地调用自己来处理以下兄弟::节点[1],直到遇到结束PI为止 XSLT2.0:将变量$s和$e绑定到两条处理指令,然后使用 <p&g

我期望的输出是:

<p>
    <?PI start?> Grab <span>all</span> these <span>text</span> nodes <?PI end?>
</p>
XSLT 1.0:最好编写一个递归模板,该模板从第一个PI开始,递归地调用自己来处理以下兄弟::节点[1],直到遇到结束PI为止

XSLT2.0:将变量$s和$e绑定到两条处理指令,然后使用

<p>
    <?PI start?><u> Grab <span>all</span> these <span>text</span> nodes </u><?PI end?>
</p>
撒克逊人:

XSLT 1.0:最好编写一个递归模板,该模板从第一个PI开始,递归地调用自己来处理以下兄弟::节点[1],直到遇到结束PI为止

XSLT2.0:将变量$s和$e绑定到两条处理指令,然后使用

<p>
    <?PI start?><u> Grab <span>all</span> these <span>text</span> nodes </u><?PI end?>
</p>
撒克逊人:


这是可能的,您如何做到这一点取决于支持的XSLT/XPath版本,当然也取决于输入,如果您想在同一父级中使用两条处理指令作为兄弟,那么可以在XPath 2中使用运算符。在XSLT 2中更复杂的设置中,通常可以使用嵌套的`来解决此类问题,每个组以/group开头,以/group结尾。在XSLT 1中,键或同级递归是一种更难编写、更难适应复杂设置的方法,但也是可行的。可能的情况是,如何实现它取决于支持的XSLT/XPath版本,当然也取决于输入,如果您想在同一父级中使用两条处理指令作为同级的简单情况下执行此操作,可以在XPath 2中使用运算符。在XSLT 2中更复杂的设置中,通常可以使用嵌套的`来解决此类问题,每个组以/group开头,以/group结尾。在XSLT 1中,键或同级递归是一种更难编写、更难适应复杂设置的方法,但它是可行的.p/*[..>>$s和.>$s和.p/*[..>$s和.>$s和。
<xsl:iterate select="p/processing-instruction(PI)[.='start']/following-sibling::node()">
   <xsl:if test="self::processing-instruction(PI)[.='end']">
      <xsl:break/>
   </xsl:if>
   ...
</xsl:iterate>
p/* => saxon:items-after(.{processing-instruction(PI)[.='start']})
    => saxon:items-before(.{processing-instruction(PI)[.='end']})