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 如何在XSLT中选择元素父元素后面的第一个元素?_Xml_Xslt_Xpath - Fatal编程技术网

Xml 如何在XSLT中选择元素父元素后面的第一个元素?

Xml 如何在XSLT中选择元素父元素后面的第一个元素?,xml,xslt,xpath,Xml,Xslt,Xpath,假设我当前有以下代码: <p> <greeting> <a name="hello">Hello!</a> </greeting> </p> <ul> <p>This paragraph needs to be selected</p> </ul> 你好 这一段需要选择 基本上,在第一部分的元素中,我需要选择下面元素的所有子元

假设我当前有以下代码:

<p>
    <greeting>
        <a name="hello">Hello!</a>
    </greeting>
</p>
<ul>
    <p>This paragraph needs to be selected</p>
</ul>

你好

    这一段需要选择


基本上,在第一部分的
元素中,我需要选择下面
元素的所有子元素。在XSLT中有这样做的方法吗?

理想情况下,您需要知道
    的父级。假设该元素是
    ,则可以使用祖先轴选择该元素,然后将路径附加到所需的后代:

    <xsl:copy-of select="ancestor::x/ul/*">
    
    
    
    或者,如果这是一个变量,则可以使用通配符:

    <xsl:copy-of select="ancestor::*[3]/ul/*">
    

    假设您位于a元素上,那么以下两个表达式中的任何一个都可以工作

    <xsl:value-of select="../../following-sibling::ul[1]/p" />
    
    <xsl:value-of select="ancestor::p[1]/following-sibling::ul[1]/p" />
    
    
    

    在这种情况下,第一个假设a是一个“孙子”,而第二个假设将在任何级别使用a,但假设要检查的相关“祖先”始终是一个p

    ,严格地说,您的XML格式不好,因为它缺少一个根元素。我们可以假设您的示例只是一个片段,并且实际的XML格式良好(如果不是,使用XSLT会很麻烦!)@TimC,这是正确的,它只是一个示例。谢谢您的回答,看起来它会起作用(让我先测试一下)。我对跟随兄弟姐妹的
    做了很多事,但显然做了些错事。