2016-02-09 46 views
0

我有以下過程的XML。如何等於xsl中的變量?

<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

HTTP看到它在行動://www.w3.org/TR/xslt/#key –

+0

您的輸入是單個XML文件還是多個XML文檔? –

+0

單個文件只... – Shanmugalakshmi

回答

1

您可以使用xsl:key通過id屬性來查找ref元素

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

因此,舉例來說,如果你定位在ref元件上的idref,你可以這樣做

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

例如,試試這個XSLT

<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> 

當你把它在格式良好的XML,像這樣...

<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> 

以下是輸出

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

http://xsltransform.net/jyRYYiS