请帮助我使用XSLT。需要从一个选择框中选择并放置到另一个选择框。 我有:
<form id="USE-THIS-ID-IN-XSLT">
<select>id="USE-THIS-ID-IN-XSLT">
<option>This will be removed</option>
<option>This will be removed</option>
<option>This will be removed</option>
</select>
</form>
和
<select id="USE-THIS-ID-ALSO">
<option>This will go up</option>
<option>This will go up</option>
<option>This will go up</option>
</select>
所以结果是
<form id="USE-THIS-ID-IN-XSLT">
<select>id="USE-THIS-ID-IN-XSLT">
<option>This will go up</option>
<option>This will go up</option>
<option>This will go up</option>
</select>
</form>
如果可能,需要在不创建单独的xsl:模板匹配的情况下执行此操作...(需要在当前执行此操作)
答案 0 :(得分:0)
您的输入无效,而不是<select>id="USE-THIS-ID-IN-XSLT">
它应该是<select id="USE-THIS-ID-IN-XSLT">
。通过此更正,遵循XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="select[@id='USE-THIS-ID-IN-XSLT']">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="//select[@id='USE-THIS-ID-ALSO']/*" />
</xsl:copy>
</xsl:template>
<xsl:template match="select[@id='USE-THIS-ID-ALSO'] |
select[@id='USE-THIS-ID-IN-XSLT']/*"/>
</xsl:stylesheet>
应用于示例输入
<html>
<form id="USE-THIS-ID-IN-XSLT">
<select id="USE-THIS-ID-IN-XSLT">
<option>This will be removed</option>
<option>This will be removed</option>
<option>This will be removed</option>
</select>
</form>
<select id="USE-THIS-ID-ALSO">
<option>This will go up</option>
<option>This will go up</option>
<option>This will go up</option>
</select>
</html>
产生输出
<html>
<form id="USE-THIS-ID-IN-XSLT">
<select id="USE-THIS-ID-IN-XSLT">
<option>This will go up</option>
<option>This will go up</option>
<option>This will go up</option>
</select>
</form>
</html>
最后一个空模板匹配应从输出中删除的所有内容。而是在与要保留的选择的模板匹配时,从已删除的选择中保留选项的副本。我不确定的是,您在输入中<select id="USE-THIS-ID-ALSO">
但不想在输入中使用它,也许这是您问题所需输出中的一个小错误。