使用XSLT查找具有变量/更改位置的XML元素



使用XSLT,我需要从XML文件找到 tag 元素才能开始进行通缉的转换。 tag 元素通常是根元素。

<tag>
   ...
</tag>

但是,XML文件的新集合到达,其中一些文件在其他地方具有 tag 元素。(其位置因文件而异)

<a>
  <b>
    <tag>
      ...
    </tag>
  </b>
</a>

我想知道是否有可能获得 tag 的完整路径/名称并将其存储到变量中,因此我可以使用 $ $ tagpath 而不是/a/b/tag 。我尝试使用name()函数,但它仅返回元素名称(tag)。

谢谢!

根据上面的注释,要找到tag元素,无论位置如何,您都可以使用\tag

如果您需要此元素的完整路径,则可以在此处使用建议的解决方案:如何在XSLT中输出当前元素路径?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="text()|@*">
      <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
      </xsl:copy>
  </xsl:template>
  <xsl:template match="//tag">
      <xsl:call-template name="genPath" />
  </xsl:template>
  <xsl:template name="genPath">
      <xsl:param name="prevPath" />
      <xsl:variable name="currPath" select="concat('/',name(),'[',count(preceding-sibling::*[name() = name(current())])+1,']',$prevPath)" />
      <xsl:for-each select="parent::*">
        <xsl:call-template name="genPath">
          <xsl:with-param name="prevPath" select="$currPath" />
        </xsl:call-template>
      </xsl:for-each>
      <xsl:if test="not(parent::*)">
        <xsl:value-of select="$currPath" />      
      </xsl:if>
  </xsl:template>
</xsl:stylesheet>

您可以在此处看到一个示例:http://fiddle.frameless.io/

相关内容

  • 没有找到相关文章

最新更新