XSLT替换选项

时间:2014-11-23 18:50:21

标签: xslt

请帮助我使用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:模板匹配的情况下执行此操作...(需要在当前执行此操作)

1 个答案:

答案 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">但不想在输入中使用它,也许这是您问题所需输出中的一个小错误。