我看到一些奇怪的行为(或者我失去了一些东西)具有以下NUnit测试:为什么包含TranslatedText节点会导致XslCompiledTransform失败?
[Test]
public void Test() {
const string works = @"
<doc>
<simple>simple</simple>
<ItemDef>
<Description>
</Description>
</ItemDef>
</doc>
";
const string doesntWork = @"
<doc>
<simple>simple</simple>
<ItemDef>
<Description>
<TranslatedText>3</TranslatedText>
</Description>
</ItemDef>
</doc>
";
string xsl = @"<?xml version='1.0' encoding='iso-8859-1'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output indent='yes'/>
<xsl:template match='simple'>
<node>
</node>
</xsl:template>
</xsl:stylesheet>
";
TransformXml2(works, xsl);
TransformXml2(doesntWork, xsl);
}
protected static void TransformXml2(string xml, string xsl) {
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(XmlReader.Create(new StringReader(xsl)));
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
XmlReader input = new XmlNodeReader(document.DocumentElement);
transform.Transform(input, new XsltArgumentList(), XmlTextWriter.Create(new StringBuilder()));
}
当我运行这个测试,第二TransformXml2调用失败,出现以下错误:
令牌状态为EndRootElement的文本将导致无效的XML文档。如果要编写XML片段,请确保ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。
XML的两片之间的唯一区别是以下节点:
<TranslatedText>3</TranslatedText>
任何人有任何想法是怎么回事?
就这么你知道,我知道TransformXml2调用没有任何用处。我只是想提供一些演示错误的可执行代码。
找到了dup:http://stackoverflow.com/questions/3288606/writing-xml-in-c-sharp-token-startelement-in-state-epilog-would-result-in-an –