У меня есть компонент, написанный на C#. Помимо прочего, он выполняет преобразование XSL на данные XML, которые он собирает. Когда я тестирую эту функцию, используя другой проект C#, который использует компонент, он работает отлично. Однако, когда я экспортирую компонент в виде COM-компонента и пытаюсь использовать эту функцию из приложения, он не работает в команде XslCompiledTransform.Load с ошибкой компиляции XSLT.Ошибка компиляции XSLT при использовании XslCompiledTransform.Load косвенно вызвана из приложения
Здесь C# код: (click_me)
И ошибка я получаю копируется в файл. Его можно найти здесь: (click_me)
Файл XSLT вместе с количеством шаблонов также состоит из «сценария C#», предназначенного для некоторых продвинутых вычислений, для которых XSLT не способен.
Вот типичный код XSL, который я использую:
<?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" xmlns:cs="urn:cs">
<xsl:output method="xml" indent="no"/>
<msxsl:script language="C#" implements-prefix="cs">
<![CDATA[
private static string[] formats_datetime = new string[]
{
"MM/dd/yyyy HH:mm:ss"
};
public string date_add(string date_str, string time_span_par)
{
DateTime date_value;
TimeSpan time_span_var = TimeSpan.Parse(time_span_par);
DateTime.TryParseExact(date_str, formats_datetime, new global::System.Globalization.CultureInfo("en-US"), global::System.Globalization.DateTimeStyles.None, out date_value);
date_value = date_value.Add(time_span_var);
string temp = date_value.ToString("MM/dd/yyyy HH:mm:ss");
return(temp);
}
]]>
</msxsl:script>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="date_node">
<xsl:variable name="date_in">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:variable name="period">
<xsl:value-of select="'06:00:00'"/>
</xsl:variable>
<xsl:copy>
<xsl:value-of select="cs:date_add($date_in, $period)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И содержание XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<node1>34</node1>
<node2>23</node2>
<date_node>12/31/2020 23:59:59</date_node>
<child>
<node1>text</node1>
<date_node>12/31/2020 23:59:59</date_node>
<grand_child>
<date_node>12/31/2020 23:59:59</date_node>
</grand_child>
</child>
</root>
Итак, почему бы вам не представить полный пример? Нам не хватает XSLT - минимальный пример, который показывает, что проблема будет в порядке. Если я должен исследовать проблему, мне нужно начать с повторного использования этой проблемы на моем компьютере. В противном случае я могу просто сказать вам, что будет завтра. :) –