我的 xml 中有以下项目名称要转换
<title>abc \" > < script > alert(1) < /script ></title>
我在我的 XSL 文件中使用以下内容进行转换:
<xsl:attribute name="itemTitle"><xsl:value-of select="title"/></xsl:attribute>
我正在使用 C# 的 XSLCompiledTransform 的 Transform 函数。我的代码是:
XPathDocument xpTemplate = new XPathDocument("articlesLookupTemplate.xsl");
XslCompiledTransform xsl = new XslCompiledTransform();
XsltArgumentList xslArg = new XsltArgumentList();
xsl.Load(xpTemplate);
using (StringReader reader = new StringReader(xmlData))
{
xsl.Transform(XmlReader.Create(reader), xslArg, output);
}
其中输出是一个 HtmlTextWriter。通过 XSLT 对其进行转换后,我希望它保持转义,即输出应该保持
itemTitle="abc" > < script > alert(1) < /script >"
但是我得到的是:
itemTitle="abc"><script>alert(1)</script>"
我在我的 xsl 文件中使用 html 输出方法并且没有禁用输出转义。如果我尝试使用文本输出方法,我会得到一个截断的输出。如何确保文本保持原样。
--- 更新 --- 我在 www.xmlper.com 上尝试了我的 xsl 和 xml
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/articles">
<table id="TemplateTable">
<xsl:for-each select="articletemplate">
<li class="Dialog-ListItem">
<xsl:attribute name="itemTitle"><xsl:value-of select="title"/></xsl:attribute>
<xsl:value-of select="title"/>
</li>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
和 XML 文件是:
<articles >
<articletemplate>
<title>abc " > < script > alert(1) < /script ></title>
</articletemplate>
</articles>
对于 xmlattribute 中的那个我得到
itemTitle="abc " > < script > alert(1) < /script >"
对于没有它的我得到
abc " > < script > alert(1) < /script >
我希望 xmlattribute 中的那个也被编码。