当output方法设置为text时,如何在xslt中输出xml元素?

时间:2011-08-18 09:09:29

标签: xslt

我将使用xslt从输入XML创建ASP.NET用户控件(ascx)。

因为涉及一些奇怪的设计代理html,输出不被授予有效的html甚至xhtml,所以从我的other question的答案告诉我需要使用输出方法文本。另一个原因是,当我使用xml或html时,输出会被xmlns-attributes I cannot prevent混乱,而不会将输出更改为文本。

当输出为XML时,我会使用这样的模板:

<xsl:template match="TextField">
            <xsl:text>
                <![CDATA[<someInvalid><stuff><fromAgency /></somInvalid>]]>
            </xsl:text>
    <xsl:apply-templates select="./Label" />
    <asp:TextBox ID="{@id}" runat="server">
        <xsl:if test="@defaultValue">
            <xsl:attribute name="value">
                <xsl:value-of select="@defaultValue"/>
            </xsl:attribute>
        </xsl:if>
    </asp:TextBox>
            <xsl:text><![CDATA[</stuff>]]></xsl:text>
    <xsl:copy-of select="$br"/>
</xsl:template>

现在,当我将输出方法切换为文本时,根本没有任何内容写入结果。

显然,文本模式只是忽略模板中的所有xml。即使输出方法设置为text,我如何调整模板输出这些元素?

澄清:<asp:TextBox> - 标记及其属性和值是此转换的所需输出,但在将输出模式更改为文本时,会从输出中忽略不计。

更新:这是一个完整的输入XML:

<?xml version="1.0" encoding="utf-8" ?>
<Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XmlForm.xsd">
   <Validation enabled="false" enableValidationSummary="true" />
   <FieldSet>
      <TextField id="firstInput" css-class="textfield-css-class" />
      <TextField id="secondInput" defaultValue="Wrdlbmrpft">
         <Label translatable="true" >Label Text</Label>
      </TextField>
   </FieldSet>
</Form>

完整的期望输出将是这样的:

<%@ Control Language="C#" AutoEventWireup="true" Inherits="DevelopmentWeb.WebUserControl1" %>
<someInvalid><stuff><fromAgency /></somInvalid>
   <asp:TextBox runat="server" ID="firstInput" CssClass="textfield-css-class"></asp:TextBox>
</stuff>
<someInvalid><stuff><fromAgency /></somInvalid>
   <asp:Label runat="server" AssociatedControlID="secondInput">Label Text</asp:Label>
   <asp:TextBox runat="server" ID="secondInput">Wrdlbrmpft</asp:TextBox>
</stuff>

0 个答案:

没有答案