我的XML文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<Forms name = "Form1">
<Form ID='allowed'></Form>
<Form ID='mandatory'></Form>
<Form ID='not_allowed'></Form>
<Form ID='choose'></Form>
</Forms>
<Forms name = "Form2">
<Form ID='mandatory'></Form>
<Form ID='not_mandatory'></Form>
<Form ID='not_mandatory'></Form>
<Form ID='not_mandatory'></Form>
</Forms>
</XML>
我想知道所有包含允许或强制使用ID的表单的表单:
<XML>
<Forms name = "Form1">
<Form ID='allowed'></Form>
<Form ID='mandatory'></Form>
</Forms>
<Forms name = "Form2">
<Form ID='mandatory'></Form>
</Forms>
</XML>
到目前为止我所拥有的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:variable name="Form" select = "'allowed'"/>
<xsl:key name="get_Forms_by_ID" match="Forms" use="Form/@ID"/>
<xsl:template match="/XML">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Forms">
<xsl:copy-of select="key('get_Forms_by_ID', $Form)"></xsl:copy-of>
</xsl:template>
我的问题是如何使用多值变量$ Form:key或mandatory来使用键函数。
答案 0 :(得分:2)
(对于XSLT 2.0)将变量定义为序列:
<xsl:variable name="Form" select = "('allowed', 'mandatory')"/>
对于XSLT 1.0,您可以使用:
<xsl:copy-of select="key('get_Forms_by_ID', 'allowed') | key('get_Forms_by_ID', 'mandatory')"/>
如果您需要首先在变量中预定义键值,则必须使用EXSLT node-set()扩展函数将它们转换为节点集,然后才能在(单个)键中使用它们()呼叫。