変換する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);
}
output は HtmlTextWriter です。XSLT を介して変換した後、エスケープしたままにしたい、つまり、出力はそのままにしておく必要があります
itemTitle="abc" > < script > alert(1) < /script >"
しかし、私が得るものは:
itemTitle="abc"><script>alert(1)</script>"
xsl ファイルで html 出力方法を使用していますが、disable-output-escaping はありません。テキスト出力方法を試すと、切り捨てられた出力が得られます。テキストがそのまま残るようにするにはどうすればよいですか。
--- 更新 --- 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 内のものもエンコードしたかったのです。