我有以下过程的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中等于变量。
提前致谢...
答案 0 :(得分:1)
您可以使用xsl:key
按ref
属性
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>
中查看此操作