我将使用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>