Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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-XPath,特定类型的最深元素_Xslt_Xpath - Fatal编程技术网

XSLT-XPath,特定类型的最深元素

XSLT-XPath,特定类型的最深元素,xslt,xpath,Xslt,Xpath,我试图找到一种方法来确保感兴趣的元素不(递归地)包含“相同”的元素。例如: <Ev> <Ev attr="0"> <Ev someOtherAttr="str1"> <Ev attr="1"> <Ev> </Ev> </Ev> </Ev> </Ev> </Ev>

我试图找到一种方法来确保感兴趣的元素不(递归地)包含“相同”的元素。例如:

<Ev>
   <Ev attr="0">
      <Ev someOtherAttr="str1">
         <Ev attr="1">
            <Ev>
            </Ev>
         </Ev>
      </Ev>
   </Ev>
</Ev>

在这里,我想确保我拥有的元素是最深的元素,属性名为attr(属性值可以是任意的,不应该匹配也不应该考虑)

因此,在本例中,我想从两个“缩进”元素中选择

我的目标是:

<xsl:for-each select="//Ev/@attr">
    <xsl:if select="//*[not(child::Ev/@attr)]">
        <xsl:value-of select="count(ancestor::node())"/>
    </xsl:if>
</xsl:for-each>

但是如果部分当然不好,那么可能每个
select=“and not()”
都有一个对应的方法

(用我尝试过的内容编辑问题)

致以最良好的祝愿,
皮斯托尔先生,这种东西适合你的需要吗

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="//Ev[@attr]" mode="deepest">
      <xsl:sort select="count(ancestor::*)" data-type="number" order="descending" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="Ev" mode="deepest">
    <xsl:if test="position() = 1">
      <!-- If we get to the inside of this xsl:if, the context node is 
           the deepest Ev in the selection -->
       <xsl:value-of select="count(ancestor::node())"/>          
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

以下XPath表达式应该可以工作,尽管它不是很有效:

//Ev[@attr and not(.//Ev[@attr])]

你试过什么吗@Pete?如果是,那么你需要发布你尝试过的内容。如果没有,那么你应该自己尝试一些东西并发布!因为“这是要求,为我提供代码”类型的问题不受鼓励,通常被视为家庭作业,并获得许多反对票和接近票。请向我们展示您目前拥有的XSLT以及该XSLT的适用范围。抱歉,我不知道这一点。但我将来会:-)。现在我添加了我的想法。不!实际上,他想把它推广开来。。假设在
Ev
having
@someOtherAttr
下出现另一个名为
Ev
having
@someOtherAttr
的元素,则应忽略子元素。。或者,如果它还有一个属性
@attr
,那么应该保留它!谢谢你的努力,但我选择了nwellnhofs解决方案。我会尽快试用。谢谢,它完全符合我的需要!
//Ev[@attr and not(.//Ev[@attr])]