xslt转换期间自动关闭xml标记
我有:xslt转换期间自动关闭xml标记,xslt,Xslt,我有: <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="{@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" />
如何自动关闭此标记?尝试删除标记之间的所有空白:
<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>
已选中
这行得通吗?这与这个问题类似(尽管你的问题是正反方向的): 这里有一个“技巧”的讨论,它会导致使用闭合元素的较长形式,您似乎无意中使用了它,形式略有不同。我怀疑您的问题是因为您要求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;
}
您使用的是什么XSLT处理器?Xalan、MSXML、.Net、libxslt?…为什么需要这些?在XML中,实际上相当于。如果您需要它用于HTML,那么您应该在
标记中使用method=“HTML”
。@Martijn用于w3c验证“xhtml”而不是HTML。这就是为什么输出是xmlI,我不希望它工作。XSLT样式表中的空白将被忽略,除非它出现在xsl:text中。@flyn1179:对此非常清楚:对于样式表,保留空白的元素名称集只包括样式表中的xsl:text
@flynn179:literal结果元素,如foo
,并且样式表的仅带空白的文本节点规则确实适用于它们。@flynn179:对于某些XSLT处理器,您的意思是什么?只有此规则的样式表将在Xalan、Oracle、Saxon、Altova、XQSharp和MSXSL 3/4中输出
。。。