XSLT с кодом C#


Мне нужно преобразовать некоторые XML с помощью XSLT. Команды XSLT выглядят следующим образом, например:

<Transformation>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts">
   <msxsl:script language="C#" implements-prefix="user">
    <msxsl:using namespace="System.IO" />
    <![CDATA[
        #region Custom-Code
        public static string FileExists(string path)
        {
            FileInfo fi = new FileInfo(path);
            return (fi.Exists && (fi.Length >0)).ToString();
        }
        #endregion
    ]]>
   </msxsl:script>
   <xsl:output method="xml" indent="no" />
   <xsl:template match="@* | node()">
    <xsl:copy>
     <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
   </xsl:template>
   <xsl:template match="Attachement">
    <xsl:choose>
     <xsl:when test="@mimetype='XPS'">
      <xsl:if test="(@type='MANUAL') and (@print='true') and (user:FileExists(File)='True')">
       <xsl:copy-of select="." />
      </xsl:if>
     </xsl:when>
     <xsl:otherwise>
      <xsl:copy-of select="." />
     </xsl:otherwise>
    </xsl:choose>
   </xsl:template>
  </xsl:stylesheet>
 </Transformation>

Как вы можете видеть, есть некоторый код C#.

Теперь моя проблема: Я пишу приложение Java. Конечно, стандартные классы Java не могут обрабатывать код C#.

Я нашел этот инструмент от Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=21714

Я думаю, что это должно работать, но вам нужен MSXML 4.0 для запуска этой утилиты. Это для меня это не проблема, но я разрабатываю это приложение для компании, и было бы здорово, если бы был инструмент, который не имеет никаких зависимостей. Другая проблема заключается в том, что я где-то читал, что эта утилита не может обрабатывать этот код c#, но я не уверен, что они использовали версию 1 или 2 из него.

Требуется только преобразование XSLT 1.0, но если возможно, я бы выбрал инструмент, который поддерживает XSLT 2.0

1 3

1 ответ:

Если вы используете Java, то есть XSLT 1.0 (Xalan, Saxon 6) и XSLT 2.0 (Saxon 9) процессоры, которые позволяют использовать Java API, например, чтобы проверить, существует ли файл. См. http://saxon.sourceforge.net/saxon6.5.5/extensibility.html например для Saxon 6 или http://xalan.apache.org/xalan-j/extensions.html#java-namespace для Ксалана или http://www.saxonica.com/documentation/index.html#! расширяемость / функции для Saxon 9.

Я не понимаю, почему MSXML это программный пакет COM, выполненный на C / C++ и не поддерживающий вызов в C# или Java, он имеет механизм расширения, позволяющий использовать JScript или VBScript.