Я вижу странное поведение (или я что-то упускаю) со следующим тестом nUnit:
[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.Убедитесь, что для параметра ConformanceLevel установлено значение ConformanceLevel.Fragment или ConformanceLevel.Auto, если вы хотите записать фрагмент XML.
Единственное различие между двумя фрагментами XML заключается в следующем узле:
<TranslatedText>3</TranslatedText>
Кто-нибудь имеет представление о том, что происходит?
Точно так же, как вы знаете, я знаю, что вызов TransformXml2 не делает ничего полезного.Я просто хотел предоставить некоторый исполняемый код, который демонстрирует ошибку.