Я попытался выполнить XSLT-преобразование XSD-файла. Моя цель состоит в том, чтобы создать SQL из XSD. До сих пор так хорошо, это то, что у меня есть:XSLT transform создает StackoverflowException
void Convert()
{
XPathDocument xpathDoc = new XPathDocument(@"myschema.xsd");
string xslPath = @"convert.xsl";
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(xslPath, new XsltSettings(true, true), null);
using (FileStream fs = File.Create(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "output.sql")))
{
try
{
transform.Transform(xpathDoc, null, fs);
}
catch
{
fs.Close();
}
}
}
Это XSLT-файл, который не удается:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Get schema nodes from this schema and any included schemas -->
<xsl:variable name="contents" select="/|document(//xs:include/@schemaLocation)" />
<xsl:template match="*" >
<xsl:for-each select="$contents" >
<xsl:apply-templates select=".//xs:element" />
</xsl:for-each>
</xsl:template>
<xsl:template match="xs:element">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Я всегда получаю StackOverflowException в System.Data.SqlXml.dll. Как остановить рекурсию? Не стоит ли останавливаться, если элемент xs:?
EDIT: Исходный код был из here и это уже была ошибка. Я попытался исправить это, упростив XSLT до тех пор, пока не останется только ошибка.
Какова ваша таблица стилей? Выбранный образец не имеет никакого смысла, поскольку он ничего не выводит. Это в основном рекурсивный «вызов» для одного и того же шаблона, что приводит к созданию SOE. –
см. Мои правки в конце моего вопроса – codymanix