我有:
<input type="checkbox" name="idsProduct" value="{@id}"
id="form_checkbox_product_{@id}">
<xsl:if test="$x=$y">
<xsl:attribute name="checked" >checked</xsl:attribute>
</xsl:if>
</input>
我得到了:
<input type="checkbox" name="idsProduct" value="26294"
id="form_checkbox_product_26294" checked="checked"></input>
我想要一个输入标签,如:
<input type="checkbox" name="idsProduct" value="26294"
id="form_checkbox_product_26294" checked="checked" />
我的xsl输出是:
<xsl:output
omit-xml-declaration="yes"
method="xml"
encoding="utf-8"
indent="no" />
如何自动关闭此标记?
答案 0 :(得分:1)
这类似于这个问题(虽然你的问题是直接反向):
Using xsl:if doesn't include closing tag
这里讨论了一个'技巧',导致使用更长形式的封闭元素,你似乎无意中在这里使用了一个稍微不同的形式。我怀疑你的问题是因为你要求xslt直接输出到文本。首先输出到xml文档,然后序列化它可以解决您的问题。
这是我用来转换为XmlDocument
而不是字符串的扩展方法,如果你想要字符串等价,你可以简单地读取.OuterXml
属性;因为XSLT没有输出文本,所以它应该正确处理封闭的标签。
public static XmlDocument Transform(this XmlDocument input, XslCompiledTransform xslt)
{
XmlDocument outDoc = new XmlDocument(input.CreateNavigator().NameTable);
using (XmlWriter xr = outDoc.CreateNavigator().AppendChild())
{
xslt.Transform(input, xr);
}
return outDoc;
}
答案 1 :(得分:0)
尝试从标记之间删除所有空格:
<input type="checkbox" name="idsProduct" value="{@id}" id="form_checkbox_product_{@id}"><xsl:if test="$x=$y"><xsl:attribute name="checked" >checked</xsl:attribute></xsl:if></input>
这有用吗?