获取节点的位置,将其用作XSLT中的属性值

时间:2019-07-24 05:04:02

标签: xslt

我有输入,那里有几个disp-quote节点。

这是正确的Xpath:body//sec/disp-quote/p

输入:

<body>
  <sec>
    <disp-quote>
       <p>Test</p>
    </disp-quote>
  </sec>
  <sec>
    <sec>
      <disp-quote>
         <p>Test</p>
      </disp-quote>
    </sec>
  </sec>
<body>

输出应为:

<context type="QuoteUsed" id="dq001"/>

<context type="QuoteUsed" id="dq002"/>

id属性应使用“ dq”,后跟一个以升序进行迭代的3位数字(例如dq001,dq002,dq003等)

尝试过的代码:

<context type="QuoteUsed">
    <xsl:attribute name="id">
                <xsl:value-of select="concat('dq','')"/>
    </xsl:attribute>
</context>

3 个答案:

答案 0 :(得分:2)

检查以下代码:-

<xsl:template match="sec/disp-quote/p">
  <context type="QuoteUsed">
      <xsl:attribute name="id">
          <xsl:text>dq</xsl:text><xsl:number level="any" format="001"/>
      </xsl:attribute>
  </context>

答案 1 :(得分:2)

尝试一下

<xsl:for-each select="body//sec/disp-quote/p">
        <context type="QuoteUsed">
            <xsl:attribute name="id">
                <xsl:value-of select="concat('dq',format-number(position(), '000'))"/>
            </xsl:attribute>
        </context>
    </xsl:for-each>

答案 2 :(得分:0)

或者不久之后:

<context type="QuoteUsed" id="dq{format-number(position(), '000')}"/>

请参阅:https://www.w3.org/TR/1999/REC-xslt-19991116#attribute-value-templates