如何在xsl中等于变量?

时间:2016-02-09 06:17:12

标签: xml xslt

我有以下过程的XML。

<document>
 <map>
  <sec>
   <title>Title 1</title>
   <ref idref="R1"/>
   ...
  </sec>
  <sec>
   <title>Title 1</title>
   <ref idref="R11"/>
   ...
  </sec>
 </map>
</document>

<document>
 <ref id="R1"><p>Paragraph one</p></ref>
</document>
...
<document>
 <ref id="R11"><p>Paragraph eleven</p></ref>
</document>
...

输出应如下所示。

<div>
 <title>Title 1</title>
 <p>Paragraph one</p>
</div>
...
<div>
 <title>Title 2</title>
 <p>Paragraph eleven</p>
</div>

我们必须将id引用到哪个标题。那么如何在xsl中等于变量。

提前致谢...

1 个答案:

答案 0 :(得分:1)

您可以使用xsl:keyref属性

查找id元素
<xsl:key name="ref" match="document/ref[@id]" use="@id" />

因此,例如,如果您被定位在ref的{​​{1}}元素上,则可以执行此类操作

idref

例如,试试这个XSLT

<xsl:template match="ref">
    <xsl:copy-of select="key('ref', @idref)/*" />
</xsl:template>

当您将其应用于格式良好的XML时,就像这样......

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" />
    <xsl:strip-space elements="*" />

    <xsl:key name="ref" match="document/ref[@id]" use="@id" />

    <xsl:template match="/*">
      <xsl:apply-templates select="document/map/sec" />
    </xsl:template>

    <xsl:template match="ref">
        <xsl:copy-of select="key('ref', @idref)/*" />
    </xsl:template>

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

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

以下是输出

<documents>
<document>
 <map>
  <sec>
   <title>Title 1</title>
   <ref idref="R1"/>
  </sec>
  <sec>
   <title>Title 1</title>
   <ref idref="R11"/>
  </sec>
 </map>
</document>
<document>
 <ref id="R1"><p>Paragraph one</p></ref>
</document>
<document>
 <ref id="R11"><p>Paragraph eleven</p></ref>
</document>
</documents>

http://xsltransform.net/jyRYYiS

中查看此操作