c# - XSLT 转换不返回任何内容

标签 c# xslt code-generation

我正在尝试创建一个基于 XSLT 转换的小型代码生成器。我是 XSLT 的新手,似乎我在转换中犯了错误(不确定在哪里)。我有两个转换(main 和 util),元数据是从 XML 文件中提取的(它存储有关表名的信息,这些信息将用于类生成 - 表名 = 类名;列名 = 字段名)。这是我的转换:

主要改造

<?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:dbs="http://kadgen/DatabaseStructure">
  <xsl:import href="..\MySolution\UtilTemplates.xslt"/>      
  <xsl:output method="text" encoding="UTF-8" indent="yes"/>    
  <xsl:param name="Name"/> 
  <xsl:param name ="filedName"/>    
  <xsl:template match="/">
    <xsl:apply-templates select=
            "//dbs:DataStructure//dbs:Table[@Name='Customer']"
          mode="BuildClasses" />
  </xsl:template>    
  <xsl:template match="dbs:Table" mode="BuildClasses">
    <xsl:call-template name="Header"/>    
    Public Class <xsl:value-of select="@Name"/>
    {
    <xsl:call-template name="ClassConstructors"/>
    <xsl:call-template name="ClassLevelDeclarations"/>
    <xsl:call-template name="FieldAccessProperties"/>
    }
  </xsl:template>    
  <xsl:template name="ClassConstructors">        
  </xsl:template>
      <xsl:template name="ClassLevelDeclarations">
      </xsl:template>    
  <xsl:template name="FieldAccessProperties">    
  </xsl:template>      
</xsl:stylesheet>

这是 util 转换:

<?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">
    <xsl:output method="text"/>
    <xsl:template name="Header">      
     using System;
     using System.Collections.Generic;
     using System.Xml;     
     using System.Linq;
     using System.Text;
    </xsl:template>  
</xsl:stylesheet>

这是我的 XML 文件的一部分:

<?xml version="1.0" encoding="utf-8" ?>
<dbs:MetaDataRoot FreeForm="true" xmlns:dbs="http://kadgen/DatabaseStructure">
  <dbs:DataStructures>
    <dbs:DataStructure Name="ASPDatabase">
      <dbs:Tables>
        <dbs:Table Name="Customer" OriginalName="Customer">
          <dbs:TableColumns>
            <dbs:TableColumn Name="CustomerID" NETType="int" IsPrimaryKey="true" />
            <dbs:TableColumn Name="Name" NETType="string" IsPrimaryKey="false"/>
          </dbs:TableColumns>
          <dbs:TableConstraints>
            <dbs:PrimaryKey>
              <dbs:PKField Name="CustomerID"/>
            </dbs:PrimaryKey>
          </dbs:TableConstraints>
          </dbs:Table>
        </dbs:Tables>
      </dbs:DataStructure>
  </dbs:DataStructures>
</dbs:MetaDataRoot>

以下是我开始转型的方式:

    XslCompiledTransform myXslTrans = new XslCompiledTransform();
    myXslTrans.Load("xslt transformation location");
    myXslTrans.Transform("XML source location", "Empty class file location");

执行上面的代码后,我得到的只是空的 cs 文件。它可能看起来很强大,但请仔细阅读并帮助我解决这个问题。

谢谢。

最佳答案

您是否尝试过使用 VS XSLT 调试器调试您的 XSLT 文件? 看起来它生成了正确的输出。 Debugger screenshot

关于c# - XSLT 转换不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281317/

相关文章:

c# - OWIN - 没有特定端口的自托管 Web Api

c# - 如何在 xamarin.forms 中添加带有 retrofit 的静态授权 header ?

c# - 如何最小化生成代码在磁盘上的程序集大小?

scala - Slick:Codegen 外键引用

xml - 如何将 XML 转换为 XSL

perl - 使用 Moose::Meta::Class 或 Class::MOP::Class 生成正确的动态类

c# - Thread、Task 和 async/await 关键字之间的区别

c# - 动态更改 Asp.Net Core 中的连接字符串

xml - Xpath/XSLT : check if following sibling is a particular node

xml - XSLT - 在展平 xml 后组合多个属性(连接)