Я попытался выполнить XSLT-преобразование XSD-файла. Моя цель в конце концов создать SQL из XSD. Пока все хорошо, вот что у меня есть:
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: element?
EDIT:
Исходный код был здесь , и в нем уже была ошибка. Я пытался исправить это, упрощая XSLT, пока не осталась только ошибка.