您可以使用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
HTTP看到它在行動://www.w3.org/TR/xslt/#key –
您的輸入是單個XML文件還是多個XML文檔? –
單個文件只... – Shanmugalakshmi