我正在创建一个转换字符串,如下所示:
string transform = @"
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:msxsl='urn:schemas-microsoft-com:xslt' exclude-result-prefixes='msxsl'>
<xsl:template match='*'>
<xsl:copy>
<xsl:for-each select='@*|*[not(* or @*)]'>
<xsl:attribute name='{name(.)}'><xsl:value-of select='.'/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates select='*[* or @*]|text()'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
";
当我加载它时,我收到此错误: {“意外的XML声明.XML声明必须是文档中的第一个节点,并且不允许在它之前出现空白字符。第2行,第21行。”} 据我所知,它抱怨新线前面的空白区域。那么,这里的想法是什么?我应该删除额外的空格吗?如果我将该字符串复制到xslt处理器中,它可以正常工作。
感谢您的帮助。
答案 0 :(得分:1)
它抱怨@"
和第一个<
之间的字符串部分。变换中的所有其他空格都将被忽略。
一种便宜的解决方法是将@"
移到下一行:
string transform =
@"<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:msxsl='urn:schemas-microsoft-com:xslt' exclude-result-prefixes='msxsl'>
...
</xsl:stylesheet>
";
或者,您可以在逐字字符串上调用Trim()
:
string transform = @"
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:msxsl='urn:schemas-microsoft-com:xslt' exclude-result-prefixes='msxsl'>
...
</xsl:stylesheet>
".Trim();
但您将无法再使transform
成为const string
。