使用XPath查找嵌套元素(相同类型)

时间:2015-12-02 12:55:57

标签: xpath nested

我无法弄清楚如何找到相同类型的嵌套元素。通常情况下,如果我有7个级别的标题并希望将它们用XSLT转换为h1-h7磁头,那么如何使用XPath-I选择它们不能比div/div/div/head更好,但这看起来非常笨拙。 / p>

1 个答案:

答案 0 :(得分:1)

此转化

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

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="div/head">
      <xsl:element name="h{count(ancestor::div)}">
        <xsl:apply-templates select="node()|@*"/>
      </xsl:element>
    </xsl:template>
</xsl:stylesheet>

应用于此XML文档时

<div>
    <head>1</head>
    <div>
        <head>2-1</head>
        <div>
            <head>3-1</head>
        </div>
    </div>
    <div>
        <head>2-2</head>
    </div>
</div>

生成想要的正确结果

<div>
    <h1>1</h1>
    <div>
        <h2>2-1</h2>
        <div>
            <h3>3-1</h3>
        </div>
    </div>
    <div>
        <h2>2-2</h2>
    </div>
</div>